与while语句相关的GCC编译错误

时间:2013-01-31 09:15:53

标签: c gcc

当尝试使用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;
 }

3 个答案:

答案 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

这就是编译器试图通过抱怨源中的杂散字符来告诉你的。