我写了一个快速程序(计算工资)来帮助我保持速度。出于某些原因,当我编译它时,我不断收到错误“53:'之前的语法错误';'标记“
#include
int main()
{
#define week 7;
#define year 365;
int jan,feb,mar,apr,may,june,july,aug,sep,oct,nov,dec;
int wage; /* Upgrade to float in future */
char input,month;
int holder;
jan=mar=may=july=aug=oct=dec=31;
apr=june=sep=nov=30;
feb=28;
for(;;)
{
if(input='y')
{
#define YEAR 366;
break;
}
else if(input='n')
{
break;
}
else
{
printf("Unable to understand input");
}
}
printf("Enter wage/day in pounds.\n?\n");
scanf("%d",&wage); /* unsure if I need to get string and then use atoi */
printf("Wage per day:\t%d\n",wage);
printf("Wage per week:\t%d\n",wage*7);
printf("Wage per month:\t%d\n",wage*30);
holder=YEAR;
printf("Wage per year:\t%d\n",wage*holder);
printf("As months have varying day amounts, if you wish to view a specific month type:\n");
printf("A-Jan\nB-Feb\nC-Mar\nD-Apr\nE-May\nF-June\nG-July\nH-Aug\nI-Sep\nJ-Oct\nK-Nov\nL-Dec\nor type X-to EXIT");
month=getchar();
if((month=='A')||(month=='C')||(month=='E')||(month=='G')||(month=='H')||(month=='J')||(month=='L')){
printf("Wage for this month will be:\t%d",wage*31);
}
else if((month=='D')||(month=='F')||(month=='I')||(month=='K')){
printf("Wage for this month will be:\t%d",wage*30);
}
else if((month=='B')&&(year==365)){
printf("Wage for this month will be:\t%d",wage*28);
}
else if((month=='B')&&(year==366)){
printf("Wage for this month will be:\t%d",wage*29);
}
else if(month=='X'){
exit(1);
}
return 0;
}
int main()
{
#define week 7;
#define year 365;
int jan,feb,mar,apr,may,june,july,aug,sep,oct,nov,dec;
int wage; /* Upgrade to float in future */
char input,month;
int holder;
jan=mar=may=july=aug=oct=dec=31;
apr=june=sep=nov=30;
feb=28;
for(;;)
{
if(input='y')
{
#define YEAR 366;
break;
}
else if(input='n')
{
break;
}
else
{
printf("Unable to understand input");
}
}
printf("Enter wage/day in pounds.\n?\n");
scanf("%d",&wage); /* unsure if I need to get string and then use atoi */
printf("Wage per day:\t%d\n",wage);
printf("Wage per week:\t%d\n",wage*7);
printf("Wage per month:\t%d\n",wage*30);
holder=YEAR;
printf("Wage per year:\t%d\n",wage*holder);
printf("As months have varying day amounts, if you wish to view a specific month type:\n");
printf("A-Jan\nB-Feb\nC-Mar\nD-Apr\nE-May\nF-June\nG-July\nH-Aug\nI-Sep\nJ-Oct\nK-Nov\nL-Dec\nor type X-to EXIT");
month=getchar();
if((month=='A')||(month=='C')||(month=='E')||(month=='G')||(month=='H')||(month=='J')||(month=='L')){
printf("Wage for this month will be:\t%d",wage*31);
}
else if((month=='D')||(month=='F')||(month=='I')||(month=='K')){
printf("Wage for this month will be:\t%d",wage*30);
}
else if((month=='B')&&(year==365)){
printf("Wage for this month will be:\t%d",wage*28);
}
else if((month=='B')&&(year==366)){
printf("Wage for this month will be:\t%d",wage*29);
}
else if(month=='X'){
exit(1);
}
return 0;
无论我读了多少次,我都无法看到我做错了什么。
作为旁注,如果有人感到尖叫/指示我的风格,请继续,因为我感谢任何可以提高我的技能的提示。
谢谢大家,这是一个非常快速的响应,我已经正确编译了代码,所以现在我可以开始调试运行时错误(在任何人提到它之前。是的,我确实理解输入后需要刷新)
答案 0 :(得分:4)
这一行出现了一个错误(虽然不是那个立即得到你的错误):
exit 1;
在C中,exit
是一个常规函数,所以你必须像这样调用它:
exit(1);
正如其他人所指出的,你对||
的使用也是不正确的,虽然这可能会给你警告(如果有的话)而不是错误。
答案 1 :(得分:2)
你做不到
if (month=='A'||'C'||'E'||'G'||'H'||'J'||'L'){
...
}
这种方式month=='A'||'C'||'E'||'G'||'H'||'J'||'L'
您正在比较错误的值,即<bool> || <char> || <char> ||...
,这会为您提供无效的语法。
试试这个,
if (month=='A' ||
month=='C' ||
month=='E' ||
month=='G' ||
month=='H' ||
month=='J' ||
month=='L') {
...
}
然而,正如@danfuzz所说,这个问题似乎在其他地方......
答案 2 :(得分:2)
您的代码存在许多灾难性问题,但大多数问题(除了exit 1
位)都可以正式编译。他们只是没有做你认为他们正在做的事情。
但是,您声明在exit 1
行之前收到编译错误。如果是这种情况,那么它必定是由你没有向我们展示的东西引起的,因为第53行没有;
。我的猜测是year
被定义为包含{的{ {1}}。
编辑:在评论中,您说您已将;
定义为year
。我怀疑你做到了这个
365
这就是造成错误的原因。在#define year 365;
之后摆脱;
。但是,如果是这种情况,我仍然不明白为什么你要将365
与year
或365
进行比较,如果你已经明确地将它366
定义的话。
编辑:所以,正如我猜测的那样。在清单常量的365
语句之后,您不需要那些;
。这是你的错误。宏被替换为文本替换,意味着目前是
#define
被翻译成
if((month=='B')&&(year==365)){
这是导致原始错误的原因。如果您想将if((month=='B')&&(365;==365)){
定义为代表year
的宏常量,那么它应该是
365
同样适用于#define year 365
,但您并未在代码中的任何位置使用它。
答案 3 :(得分:0)
你的sintax是错的,正确的写法是:
if((month=='A')||(month=='C')||(month=='E')||(month=='G')||(month=='H')||(month=='J')||(month=='L')){
printf("Wage for this month will be:\t%d",wage*31);
}
等等。但您可能需要考虑可能更容易阅读的开关。
switch( month ) {
case 'A':
case 'C':
case 'E':
case 'G':
case 'H':
printf( "statement A\n");
break;
case 'K':
case 'D':
case 'F':
printf( "statement B\n");
break;
case 'B':
if( year == 365) {
printf( "something else\n" );
} else if( year == 366 ) {
printf( "something else\n" );
} else {
printf( "Unexpected year %d\n", year );
}
break;
case 'X':
return -1; /* Note here return... not exit! */
default:
printf( "Why am I here?\n" );
break;
}
现在您编辑了另一个错误#define YEAR 365;
摆脱那个';'。您可能更喜欢将其定义为int
而不是使用预编译器定义,尤其是如果要更改其值