如何在没有错误消息的情况下使用fgets()?

时间:2011-04-05 11:15:09

标签: c

我正在学习C,对某些人来说这可能是一个微不足道的问题。

我的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;
        }

2 个答案:

答案 0 :(得分:3)

您有一个括号不匹配错误。计算(的数量,并与)的数量进行比较。

该行应该是:

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

请注意,当参数的语法需要时,您只需要sizeof的parens; sizeof本身是一个运算符,而不是函数。

我的手工和类似幼儿园的匹配括号的方法是简单地从左到右扫描线条,同时保持计数:

  • 从0开始
  • 当您找到(时,请增加点数
  • 当您找到)时,减少计数

当您到达行尾时,如果计数未回到0,则表示您不匹配。很明显,但很快就能确定是否存在不匹配。

答案 1 :(得分:2)

你有一个额外的支架。试试这个:

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