0

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) は、これらすべてのエラーを 1 行のコードに示します。

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;
 }
4

3 に答える 3

3
于 2013-01-31T09:20:48.103 に答える
2
while(fgets(line ,STRSIZE∗NFIELDS, fp))
                         ^
                         ^

する必要があります

while(fgets(line ,STRSIZE*NFIELDS, fp))
                         ^
                         ^

(2 つの違いがわかるかどうかは、文字を表示するために使用されるフォントによって異なります)。

最初の ∗ は、乗算演算子に使用される文字ではありません。ここではこの文字です

于 2013-01-31T09:21:57.613 に答える
0

STRSIZE*NFIELDS の「*」文字は通常の * (ASCII 値 42) ではなく、Unicode 文字「ASTERISK OPERATOR」です: http://www.fileformat.info/info/unicode/char/2217/index.htm

それが、コンパイラがソース内のはぐれ文字について不平を言うことで、あなたに伝えようとしていることです。

于 2013-01-31T09:23:24.650 に答える