• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 414
  • Last Modified:

line 26: Parse Error, expecting `NUMBER'

I am trying to figure where my error is coming from.  This program is supposed to give the equivalents of five currencies in USD.  Here is the code:

#include <stdio.h>
main ()
{
      float ad;
      float cd;
      float dk;
      float nk;
      float tb;
      
      int ans;
      
      do
      {
            printf("***** CURRENCY CONVERTER *****");
            printf("1 - Australian Dollars \n");
            printf("2 - Canadian Dollars \n");
            printf("3 - Danish Krone \n");
            printf("4 - Norwegian Kroner \n");
            printf("5 - Thai Bhat \n\n");
            scanf(" %d", &ans);
      }
            while ((ans!='1')&&(ans!='2')&&(ans!='3')&&
                   (ans!='4')&&(ans!='5'));
      switch (ans)
      {
            case ('1') : {ad = 1.38274;
                        printf("\n The equivalent in US Dollars is %.2f", ad);
                        break;}
            case ('2') : {cd = 1.2629;
                        printf("\n The equivalent in US Dollars is %.2f", cd);
                        break;}
            case ('3') : {dk = 6.001;
                        printf("\n The equivalent in US Dollars is %.2f", dk);
                        break;}
            case ('4') : {nk = 6.692;
                        printf("\n The equivalent is US Dollars is %.2f", nk);
                        break;}
            case ('5') : {tb = 41.36;
                        printf("\n The equivalent is US Dollars is %.2f", tb);
                        break;}
      }
      getch();
      return;  
}
0
JJ7717
Asked:
JJ7717
1 Solution
 
Kent OlsenData Warehouse Architect / DBACommented:


The code isn't particularly well structured, and that's probably leading to the "hiding" of this problem.

Take the ';' off of the while() statement.  You're probably seeing an "infinite loop" and this is the reason.


Good Luck,
Kent
0
 
lwinkenbCommented:
Couple notes:

main should be declared as either
int main() or int main(int argc, char **argv)

Also you variable ans is declared as an int.  Therefore in your while loop you should not be comparing it against characters.  For instance, it should be while(ans != 1) not while(ans != '1').
Also you while loop is pretty worthless as it stand since it is considered empty.  The structure of a while loop should be:
while(condition)
{
//...
}

You while loop currently looks like:
while(condition);


0
 
libin_vCommented:
Since there is a 'do' statement preceding the while I do think the ';' is neccessary
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
ankuratvbCommented:
Do-While requires a semi-colon at the end of while.

The problem is the quotes surrounding the integer values 1-5;

Your while statement should be something like:

while ((ans!=1)&&(ans!=2)&&(ans!=3)&&
                (ans!=4)&&(ans!=5));
   
Similarly,remove the single quotes from the case statements as well.

case 1:

case 2:

etc.
0
 
PaulCaswellCommented:
My compiler says to use:

     double ad;
     double cd;
     double dk;
     double nk;
     double tb;

...

Paul
0
 
stefan73Commented:
Hi Kdo,
> The code isn't particularly well structured

Good point.
JJ7717, you have a lot of redundancy here. Think about using an array of structs instead:

struct currency{
    char* name;
    char* short_name;
    double rate;
}

then you can define all your currencies nicely:

struct currency all_currencies[]={
    {"Australian Dollar", "AUD", 1.38274},
    {"Euro", "EUR", 0.85345435},
};

...now you should know how to proceed: Loop to print the choices, do the appropriate calculations, etc.

Cheers!

Stefan
0
 
JJ7717Author Commented:
Thanks to everyone who commented on my problem.  I will put together the suggestions and retool my program.

John
0
 
x25Commented:
The parse error you have is particularly because of the LPAREN `(' character found after the case keyword. The compiler interprets the value after the `case' as a number. And, hence, the Left parentheses you have is unexpected for the compiler.

When you enclose a digit number between single quotes in the case statement like (case '2': ), this is perfectly legal. However, their actual value is not 2 but actually the ASCII code number for the character 2, which is in fact  50. Which can be very misleading and "hidden" in your program.


0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now