Как использовать fgets () без сообщения об ошибке? - PullRequest
1 голос
/ 05 апреля 2011

Я изучаю C, и для некоторых это может быть тривиальным вопросом.

Моя IDE жалуется на ошибку: ожидаемое выражение перед токеном! = 100 в цикле 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;
        }

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

У вас есть ошибка несоответствия скобок. Подсчитайте количество ( и сравните с числом ).

Возможно, строка должна быть:

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

Обратите внимание, что вам нужны только парены с sizeof, когда этого требует синтаксис аргумента; sizeof сам по себе оператор, а не функция.

Мой ручной и очень похожий на детский сад способ сопоставления скобок заключается в простом сканировании строки слева направо, сохраняя при этом счет:

  • Начало в 0
  • Когда вы найдете (, увеличьте счет
  • Когда вы найдете ), уменьшите счет

Когда вы достигнете конца строки, если счет не вернется к 0, у вас будет несоответствие. Очень очевидно, но достаточно эффективно, чтобы быстро определить наличие несоответствия.

2 голосов
/ 05 апреля 2011

У вас есть дополнительный кронштейн.Попробуйте это:

while ( fgets( linebuffer, sizeof(linebuffer), fp_infile ) != NULL )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...