当尝试使用GCC编译这个简短的C程序时,我得到以下错误:
expected ‘)’ before numeric constant
make: *** [file3_5.o] Error 1
stray ‘\210’ in program
stray ‘\227’ in program
stray ‘\342’ in program
Eclipse(Juno)将所有这些错误指向一行代码:
while(fgets(line ,STRSIZE∗NFIELDS, fp))
使用以下语句编译:
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"file3_5.d" -MT"file3_5.d" -o "file3_5.o" "../file3_5.c"
这是我正在尝试编译的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRSIZE 100
#define NFIELDS 9
int main()
{
char inputfile[]= "/home/ty/workspace/OpenCoursware_Exercises/Assign_ /stateoutflow0708.txt";
/* define all of the fields */
char state_code_org[STRSIZE];
char country_code_org[STRSIZE];
char state_code_dest[STRSIZE];
char country_code_dest[STRSIZE];
char state_abbrv[STRSIZE];
char state_name[STRSIZE];
char line[STRSIZE*NFIELDS];
int return_num = 0;
int exmpt_num=0;
int aggr_agi= 0;
long total=0;
/* file related */
int fields_read = 0;
FILE* fp=fopen(inputfile,"r");
if(fp==NULL)
{
fprintf(stderr, "Cannot open file\n");
exit(-1);
}
/* skip first line */
fgets(line, STRSIZE*NFIELDS,fp);
/* print the header */
printf ("%-30s,%6s\n","STATE","TOTAL");
printf("---------------------------------------\n");
while(fgets(line ,STRSIZE∗NFIELDS, fp))
{
/* parse the fields */
fields_read=sscanf(line,"%s %s %s %s %s %s %d %d %d",
state_code_org,
country_code_org,
state_code_dest,
country_code_dest,
state_abbrv,
state_name,
&return_num,
&exmpt_num,
&aggr_agi);
if(strcmp(state_code_org, "\"25\"")==0)
{
printf("%-30s, %6d\n", state_name, aggr_agi);
total += aggr_agi;
}
}
/* print the header */
printf(" ----------------------------------------\n");
printf("%-30s,%6lu\n","TOTAL",total);
fclose(fp);
return 0;
}
答案 0 :(得分:3)
您的∗
不是乘法运算符*
,它们可能看起来相似,但字符不同,gcc无法识别*
答案 1 :(得分:2)
while(fgets(line ,STRSIZE∗NFIELDS, fp))
^
^
应该是
while(fgets(line ,STRSIZE*NFIELDS, fp))
^
^
(您是否看到两者之间的差异取决于用于显示字符的字体)。
第一个中的*不是乘法运算符使用的字符,而是this character here。
答案 2 :(得分:0)
STRSIZE * NFIELDS中的“*”字符不是常规*(ascii值42),而是unicode字符“ASTERISK OPERATOR”:http://www.fileformat.info/info/unicode/char/2217/index.htm
这就是编译器试图通过抱怨源中的杂散字符来告诉你的。