2011-04-05 25 views
1

我正在學習C語言,這對一些人來說可能是一個棘手的問題。如何使用fgets()沒有錯誤信息?

我的IDE投訴,有一個錯誤:「!=」之前在while循環令牌預期表現。

我看不出這有什麼問題,有什麼建議?

/* Print a file to the console, line by line. */ 
    FILE *fp_infile; 
    char linebuffer[512]; 

    if ((fp_infile=fopen("input.dat", "r")) == NULL) 
    { 
     fprintf(stderr, "Couldn't open input file.\n"); 
     return -1; 
    } 

    while (fgets(linebuffer, sizeof(linebuffer), fp_infile)) != NULL) // ERROR 
    fputs(linebuffer, stdout); 

    if (! feof(fp_infile)) // This means "if not end of file" 
     fprintf(stderr, "Error reading from input file.\n"); 

     if (fclose(fp_infile) != 0) 
     { 
      fprintf(stderr, "Error closing input file.\n"); 
      return -2; 
     } 

回答

3

您有一個括號不匹配錯誤。計算(的數量,並與)的數量進行比較。

行也許應該是:

while (fgets(linebuffer, sizeof linebuffer, fp_infile) != NULL) 

注意在需要時由參數的語法,你只需要與sizeof括號; sizeof本身是一個運算符,而不是一個函數。

我的括號匹配手動和非常幼兒園樣的方式,是簡單地掃描線從左至右,同時保持計數:

  • 從0開始
  • 當你發現一個(,增加數
  • 當你發現一個),減少數

當你到達行的末尾,如果計數不回0 ,你有一個錯配。非常明顯,但很快就可以快速確定是否存在不匹配。

+0

整個'!= NULL'是多餘的...... – 2011-04-05 12:35:34

2

你有一個額外的支架。試試這個:

while (fgets(linebuffer, sizeof(linebuffer), fp_infile) != NULL)