Solved

# line 26: Parse Error, expecting `NUMBER'

Posted on 2004-10-06
404 Views
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 cd;
float dk;
float nk;
float tb;

int ans;

do
{
printf("***** CURRENCY CONVERTER *****");
printf("1 - Australian 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
Question by:JJ7717

LVL 45

Expert Comment

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

LVL 5

Expert Comment

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

LVL 5

Expert Comment

Since there is a 'do' statement preceding the while I do think the ';' is neccessary
0

LVL 9

Accepted Solution

ankuratvb earned 125 total points
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

LVL 16

Expert Comment

My compiler says to use:

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

...

Paul
0

LVL 12

Expert Comment

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

Author Comment

Thanks to everyone who commented on my problem.  I will put together the suggestions and retool my program.

John
0

Expert Comment

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

### Suggested Solutions

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ouâ€¦
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were smallâ€¦
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.