Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 287
  • Last Modified:

Program won't compile getting error message

Error message, I cannot figure it out:
Miracle C Compiler (r3.2), written by bts.
Compiling C:\Program Files\Miracle C\MichaelExample2.c
main

C:\Program Files\Miracle C\MichaelExample2.c: line 106: Parse Error, expecting `SEP'
'return 0'
aborting compile


Program:

#define VERSION "1.1"
#define INVALID_VALUE -29833
/******************************************************************************
Program filename: conversion.c
         

The program assumes that the user does not enter anything except valid numbers
(including minus sign and decimal point).  That's a bad assumption in the real
world, but okay for this class assignment.
*******************************************************************************/

#include <stdio.h>

int main ()
{
    /**
     * CAUTION: The following two arrays must match each other.
     * If you add to one, you must add to the other.
     * Otherwise, they'll get out of sync.
     */

    // array of conversion rates of foreign currency / USD$1.00
    float afRate[] = {
      107.10,  // Japanese Yen
      0.5472,  // British pounds sterling
      0.8212,  // Euro
      3.7501,  // Saudi Riyal
      1.2424   // Swiss Franc line 30
    };

    char *aszCurrency[] = {
        "Japanese Yen",
        "British Pound",
        "Euro",
        "Riyal",
        "Swiss Franc"
    };

    float cvtdAmount, foreignAmount;
    int input, userWantsExit = 0, nrCurrencies, i;

    nrCurrencies = sizeof(afRate) / sizeof(afRate[0]);  // nr of currencies

    while(!userWantsExit) {
        printf("\n\n  Currency Conversion, v%s \n\n", VERSION);  //displayes title
        printf("Available currencies and equivalence to US$1.00\n\n"); //title
        for (i=0; i<nrCurrencies; i++) {
            printf("%d: %15s   %8.4f\n", i+1, aszCurrency[i], afRate[i]);
             //loop that goes through the area and prints out the menu
        }
        printf("0: %15s\n", "Exit");  
        //once the loop ends print out the last menu choice. which is 0. exit program.  line 54

        printf("\nWhich currency to convert to from? ");
        input = INVALID_VALUE;  // in case user enters non-numeric
        fflush(NULL);       //I think if you get the bad value the loop will go again and flush out all the values.
        scanf("%d", &input); //get the menu choice.

        if ((input <= nrCurrencies) && (input >= 1)) {
            printf("\nAmount of %s to convert: ", aszCurrency[input-1]);
            foreignAmount = (float) INVALID_VALUE;  
            // same thing if a bad value is entered the loop will continue until it is flushed above
            scanf("%f", &foreignAmount);  //get the amount of foreign moneis you want to convert
            if ((float) INVALID_VALUE == foreignAmount) {
               printf("\n*** Invalid amount (alphabetic?); try again.\n");
            }
            printf("\nWhich currency to convert to US$? ");
        input = INVALID_VALUE;  // in case user enters non-numeric  line 70
        fflush(NULL);       //I think if you get the bad value the loop will go again and flush out all the values.
        scanf("%d", &input); //get the menu choice.
        }
            else {
               cvtdAmount = foreignAmount / afRate[input-1];   //Oh good idea! menu choice is the array number..  line 75
               printf("\n%f %s is equivalent to US$%.2f\n(Rate: %f %s to US$1)",
                 foreignAmount, aszCurrency[input-1], cvtdAmount,
                 afRate[input-1], aszCurrency[input-1]);    //all the amounts are then calculated and displayed here.  line 78
            }
            }
               
              if ((input <= nrCurrencies) && (input >= 1)) {
            printf("\nAmount of %s to convert: ", aszCurrency[input-1]);
            foreignAmount = (float) INVALID_VALUE;  
            // same thing if a bad value is entered the loop will continue until it is flushed above   line 85
            scanf("%f", &foreignAmount);  //get the amount of foreign moneis you want to convert
            if ((float) INVALID_VALUE == foreignAmount) {
               printf("\n*** Invalid amount (alphabetic?); try again.\n");
            }
            else {
               cvtdAmount = foreignAmount / afRate[input-1];   //Oh good idea! menu choice is the array number..  line 91
               printf("\n%f %s is equivalent to US$%.2f\n(Rate: %f %s to US$1)",
                 foreignAmount, aszCurrency[input-1], cvtdAmount,
                 afRate[input-1], aszCurrency[input-1]);    //all the amounts are then calculated and displayed here.  line 94
            }
            }
           
        else if  (0 == input)
            userWantsExit = 1;   // user wants to userWantsExit  line 99
        else {  // invalid input
            if (INVALID_VALUE == input)
                printf("\n*** Invalid input (alphabetic?); try again.\n");
            else
                printf("\n*** Invalid input (%d); try again.\n", input);
        }
    } // while(!userWantsExit)

    return 0;
}
//line 110
0
macshawn
Asked:
macshawn
  • 10
  • 3
  • 2
  • +3
2 Solutions
 
Jaime OlivaresSoftware ArchitectCommented:
it is related to an extra closing bracket  }

You have to make proper indentation to detect it.
0
 
Jaime OlivaresSoftware ArchitectCommented:
           else {
                  cvtdAmount = foreignAmount / afRate[input-1];
                  printf("\n%f %s is equivalent to US$%.2f\n(Rate: %f %s to US$1)",
                  foreignAmount, aszCurrency[input-1], cvtdAmount,
                  afRate[input-1], aszCurrency[input-1]);    
            }
      }  /* <--------------------------------I think is this */
0
 
macshawnAuthor Commented:
thanks just found it, is their a way to fix my mess so it will take a second input currency and convert to that?

for example, what this mess is supposed to do is take a currency and figure out the us equivalent and then take a second currency and convert original currency to second.
example
1 yen = 10 us$
second choice
euro, yen converted to euro = 100
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
Jaime OlivaresSoftware ArchitectCommented:
The answer is: divide and conquer. You must to use functions to avoid the mess.

1st function: Prompt for first currency and value, and validate it.
2nd function: convert to an middle currency, let's say dollar (not a good choice nowadays)
3rd function: Prompt for second currency and value, and validate it
4th function: convert to target currency

This way your main() function will look readable (no more than 10 or 15 lines).
 Also don't forget to indent properly, is the key for clean programming.
0
 
Kent OlsenData Warehouse Architect / DBACommented:

Hi macshawn,

Glad to see that you took my suggestion and have made this table driven.  :)

Jaime's correct.  Split the program so that "logical steps" are performed as functions.  It will make the code much easier to read.

Step 1.  Move afRate and aszCurrency into global storage.  You probably want to do that regarless of other changes.
Step 2.  Split things up.

#define MAX_CONVERION 5
main ()
{
  int Selection;

  while (1)
  {
    PrintMenu ();
    Selection = GetChoice ();
    if (Selection == 0)
      break;
    if (Selection < 0 || Selection > MAX_CONVERSION)
    {
      PrintErrorMessage ();
      continue;
    }
    DoMoreStuff ();
  }
}


Good Luck,
Kent

}
0
 
macshawnAuthor Commented:
Ok, I feel so dumb, cannot get this to work, I keep trying too many different ways and I think I have really confused myself.

My current error message:

Miracle C Compiler (r3.2), written by bts.
Compiling c:\program files\miracle c\wk6classex.c

c:\program files\miracle c\wk6classex.c: line 41: Parse Error, expecting `SEP'
'{ int Selection'
aborting compile





Here is what I have, tried incorporating Kent's suggestions but got lost on what I was doing.

#define VERSION "1.1"
#define INVALID_VALUE -29833
#define Max-Conversion5

/******************************************************************************

        Purpose : Convert foreign currency to $US
        Version : 1.0

The program assumes that the user does not enter anything except valid numbers
(including minus sign and decimal point).  That's a bad assumption in the real
world, but okay for this.
*******************************************************************************/

#include <stdio.h>


    /**
     * CAUTION: The following two arrays must match each other.
     * If you add to one, you must add to the other.
     * Otherwise, they'll get out of sync.
     */
/*****Moved to Global variables******/
    // array of conversion rates of foreign currency / USD$1.00
    float afRate[] = {
      107.10,  // Japanese Yen
      0.5472,  // British pounds sterling
      0.8212,  // Euro
      3.7501,  // Saudi Riyal
      1.2424   // Swiss Franc
    };

    char *aszCurrency[] = {
        "Japanese Yen",
        "British Pound",
        "Euro",
        "Riyal",
        "Swiss Franc"
    };
main();
{
/**********************Need to break up program into more understandable sections**************/
      int Selection;
      
      while(1)
      {
            PrintMenu();
            Selection = GetChoice();
            if(Selection == 0)
                  break;
            if(Selection < 0 || Selection > Max_Conversion)
            {
               PrintErrorMessage();
               continue;
            }
            DoMoreStuff();
      }
}
    float cvtdAmount, foreignAmount;
    int input, userWantsExit = 0, nrCurrencies, i;

    nrCurrencies = sizeof(afRate) / sizeof(afRate[0]);  // nr of currencies

    while(!userWantsExit) {
        printf("\n\n  Currency Conversion, v%s \n\n", VERSION);
        printf("Available currencies and equivalence to US$1.00\n\n");
        for (i=0; i<nrCurrencies; i++) {
            printf("%d: %15s   %8.4f\n", i+1, aszCurrency[i], afRate[i]);
        }
        printf("0: %15s\n", "Exit");

        printf("\nWhich currency to convert to US$? ");
        input = INVALID_VALUE;  // in case user enters non-numeric
        fflush(NULL);
        scanf("%d", &input);

        if ((input <= nrCurrencies) && (input >= 1)) {
            printf("\nAmount of %s to convert: ", aszCurrency[input-1]);
            foreignAmount = (float) INVALID_VALUE;
            scanf("%f", &foreignAmount);
            if ((float) INVALID_VALUE == foreignAmount) {
               printf("\n*** Invalid amount (alphabetic?); try again.\n");
            }
            else {
               cvtdAmount = foreignAmount / afRate[input-1];
               printf("\n%f %s is equivalent to US$%.2f\n(Rate: %f %s to US$1)",
                 foreignAmount, aszCurrency[input-1], cvtdAmount,
                 afRate[input-1], aszCurrency[input-1]);
            }
       
        else if (0 == input)
            userWantsExit = 1;
              // user wants to userWantsExit
        else {  // invalid input
            if (INVALID_VALUE == input)
                printf("\n*** Invalid input (alphabetic?); try again.\n");
            else
                printf("\n*** Invalid input (%d); try again.\n", input);
        }
    } // while(!userWantsExit)

    return 0;
}

/********************************************************************************/
 

0
 
pankajtiwaryCommented:
I don't understand something. Everytime I see the problem is with the other files than the poster has posted. The poster has posted code conversion.c (first post) and then the second time also may be the same thing. But the error shows the error in the files MichaelExample2.c (in the first post) and wk6classex.c (in the second post). Is the poster sure he is posting the correct code?
0
 
pankajtiwaryCommented:
I am not able to figure out the second code. The first one is okay for me. So, going with that:

Do not use C++ style comments (//) when you are writing C code please. I beg you.

Below is a completely compilable working program. From the text of the code, I really could not figure out what is the idea of the poster. But he can make appropriate changes (very minimal for invalid input or anything else). But I really want to know the intention of the user. Another thing is user is asking to input the choice twice, I have no idea why. From my perspective, the code should be as follows.

#include <stdio.h>

#define VERSION "1.1"

float afRate[] = {
      107.10,
    0.5472,
    0.8212,
    3.7501,
    1.2424
};

char *aszCurrency[] = {
    "Japanese Yen",
    "British Pound",
    "Euro",
    "Riyal",
    "Swiss Franc"
};

int main ()
{
    float cvtdAmount, foreignAmount;
    int input, nrCurrencies, i, userWantsExit = 0;

    nrCurrencies = sizeof(afRate) / sizeof(afRate[0]);

    while(!userWantsExit) {
        printf("\n\n  Currency Conversion, v%s \n\n", VERSION);
        printf("Available currencies and equivalence to US$1.00\n\n");
        for (i=0; i<nrCurrencies; i++) {
            printf("%d: %15s   %8.4f\n", i+1, aszCurrency[i], afRate[i]);
        }
        printf("0: %15s\n", "Exit");
        printf("\nWhich currency to convert to from? ");
        input = INVALID_VALUE;
        fflush(NULL);
        scanf("%d", &input);

        if ((input <= nrCurrencies) && (input >= 1)) {
            printf("\nAmount of %s to convert: ", aszCurrency[input-1]);
            foreignAmount = (float) INVALID_VALUE;
            scanf("%f", &foreignAmount);

            cvtdAmount = foreignAmount / afRate[input-1];
            printf("Debug: %f = %f / %f\n", cvtdAmount, foreignAmount, afRate[input - 1] ) ;
            printf("\n%f %s is equivalent to US$%.2f\n(Rate: %f %s to US$1)", foreignAmount, aszCurrency[input-1], cvtdAmount, afRate[input-1], aszCurrency[input-1]);
            continue ;
        }
        else if  (0 == input)
            userWantsExit = 1;
        else {
            if (INVALID_VALUE == input)
                printf("\n*** Invalid input (alphabetic?); try again.\n");
            else
                printf("\n*** Invalid input (%d); try again.\n", input);
        }
    }
    return 0;
}
0
 
macshawnAuthor Commented:
Thanks for your help what I am trying to turn this mess into is a program that:
ask "which currency to convert from?"
   then
ask "amount? "
   then
ask "which currency to convert to? "
   then
display for example "100 Japan Yen is equivalent to 125 US$"
   then
display for example the second selected currency "100 Japan Yen is equivalent to 200 Euro"

hope that makes sense.

about the other question. I keep getting lost trying to add some friends suggestions to my code and incorporate the Expert suggestion that you all come up with.  
I just get lost.
thanks for your help.
Can you help me chage what we have above to incorporate this by suggesting some starting points?
Thank you again



0
 
macshawnAuthor Commented:
Are the double // C++ ? sorry I did not realize that my Miracle C compiler does not know the difference, will change on next post :0)
0
 
macshawnAuthor Commented:
When I run the code above I get an error, that I must be overlooking, message is:

Miracle C Compiler (r3.2), written by bts.
Compiling C:\Program Files\Miracle C\TeacherEx6.c
main

C:\Program Files\Miracle C\TeacherEx6.c: line 36: variable 'INVALID_VALUE' not found
'input = INVALID_VALUE'
aborting compile

complete code is:

#include <stdio.h>

#define VERSION "1.1"

float afRate[] = {
     107.10,
    0.5472,
    0.8212,
    3.7501,
    1.2424
};

char *aszCurrency[] = {
    "Japanese Yen",
    "British Pound",
    "Euro",
    "Riyal",
    "Swiss Franc"
};

int main ()
{
    float cvtdAmount, foreignAmount;
    int input, nrCurrencies, i, userWantsExit = 0;

    nrCurrencies = sizeof(afRate) / sizeof(afRate[0]);

    while(!userWantsExit) {
        printf("\n\n  Currency Conversion, v%s \n\n", VERSION);
        printf("Available currencies and equivalence to US$1.00\n\n");
        for (i=0; i<nrCurrencies; i++) {
            printf("%d: %15s   %8.4f\n", i+1, aszCurrency[i], afRate[i]);
        }
        printf("0: %15s\n", "Exit");
        printf("\nWhich currency to convert to from? ");
        input = INVALID_VALUE;
        fflush(NULL);
        scanf("%d", &input);

        if ((input <= nrCurrencies) && (input >= 1)) {
            printf("\nAmount of %s to convert: ", aszCurrency[input-1]);
            foreignAmount = (float) INVALID_VALUE;
            scanf("%f", &foreignAmount);

            cvtdAmount = foreignAmount / afRate[input-1];
            printf("Debug: %f = %f / %f\n", cvtdAmount, foreignAmount, afRate[input - 1] ) ;
            printf("\n%f %s is equivalent to US$%.2f\n(Rate: %f %s to US$1)", foreignAmount, aszCurrency[input-1], cvtdAmount, afRate[input-1], aszCurrency[input-1]);
            continue ;
        }
        else if  (0 == input)
            userWantsExit = 1;
        else {
            if (INVALID_VALUE == input)
                printf("\n*** Invalid input (alphabetic?); try again.\n");
            else
                printf("\n*** Invalid input (%d); try again.\n", input);
        }
    }
    return 0;
}
0
 
macshawnAuthor Commented:
Another dumb nubie question, when counting lines, like in the example for the error code the compiler returned, do you just count the code lines or are spaces include in line numbers?
0
 
macshawnAuthor Commented:
I know it is late but any help would be really, really appreciated. :)
0
 
PaulCaswellCommented:
Try either:

       input = -1;

or

#define INVALID_VALUE -1

>>Another dumb nubie question, when counting lines, like in the example for the error code the compiler returned, do you just count the code lines or are spaces include in line
Not dumb at all!! The line number is the exact line number in the original file. If your editror shows the line numbger then thats the number it will report.

Paul
 
 
0
 
PaulCaswellCommented:
Sorry, I missed a previous posting. Youve deleted the line:

#define INVALID_VALUE -29833

Paul
0
 
macshawnAuthor Commented:
Thanks Paul, that made it compile.  This is no longer a homework problem already turned a version in. I completed the assignment using switch and case statments and this solution was suggested earlier as easier but I don't get the flow, logic or what not.  Just want to see if I can figure out how to make this accept input such as:

ask "which currency to convert from?"
   then
ask "amount? "
   then
ask "which currency to convert to? "
   then
display for example "100 Japan Yen is equivalent to 125 US$"
   then
display for example the second selected currency "100 Japan Yen is equivalent to 200 Euro"

hope that makes sense.
Thanks again for your help.

0
 
ssnkumarCommented:
You can use the printf() itself to display whatever you want.
Or I have not understood your question....more clarification needed!!

-ssnkumar
0
 
macshawnAuthor Commented:
How to build the the section that will do the calculations , table structure, what do I need to expand?  I can add the extra printf lines and scanf lines to the code later, or later today.  I was just told that this was an easier program to adapt to a second input that will compare it to the first and I don't see how?  I need a push in the right direction.
thanks.
0
 
ssnkumarCommented:
I think you are getting confused and making it look complicated.
Now stop looking at the code. Just think of the whole problem. Write it down.
Put it into steps. This is the algorithm. If you could achieve this, then the code will become very simple.
If you show us your algorithm, then we could try to help you more.

-ssnkumar
0
 
macshawnAuthor Commented:
ok, thanks, will look at this later and see what I can do.
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 10
  • 3
  • 2
  • +3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now