2011-04-05 2 views
1

나는 C 언어를 배우고 있는데, 이것은 trival 질문일지도 모른다.오류 메시지없이 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

괄호 불일치 오류가 있습니다. (의 수를 세어 )의 수와 비교하십시오.

선은 아마되어야합니다 : 인수의 구문에 의해 필요한 경우에만 sizeof에 괄호가 필요

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

참고; sizeof 그 자체가 기능이 아니라 운영자입니다. 괄호 일치의

내 매뉴얼과 매우 유치원 같은 방법은, 카운트 유지하면서, 왼쪽에서 오른쪽으로 간단하게 라인을 검사하는 것입니다 : 0

  • 에서

    • 시작을 당신이 (을 찾을 때, 당신이 )을 찾을 때 카운트가 다시 0이 아닌 경우는, 행의 끝에 도달하면 감소 카운트

    을 개수

  • 을 증가 , 당신은 불일치가 있습니다. 매우 분명하지만 매우 효율적이어서 불일치의 존재를 신속하게 판단 할 수 있습니다.

  • +0

    전체'! = NULL'은 중복됩니다 ... –

    2

    추가 브래킷이 있습니다. 이것을 시도하십시오 :

    while (fgets(linebuffer, sizeof(linebuffer), fp_infile) != NULL) 
    
    관련 문제