从文件读取时如何处理数据或char -1,因为EOF也是-1

时间:2019-05-07 10:53:08

标签: c

我正在尝试从文件中读取一系列负数。 数字-1重复了n次,我也读取了所有数据,直到EOF。 由于数据是-1,EOF也是-1,如何处理这种情况?

1 个答案:

答案 0 :(得分:2)

标准C字符输入函数返回一个unsigned charEOF的值。因此,要使用fgetc之类的函数的返回值,请将其存储在int中,而不要存储在char中:

int x = fgetc(stdin);
if (x == EOF)
    // Code for handling error or end of file.
else
    // Code for handling a character.

还要注意,许多用于处理字符的标准C例程都使用unsigned char。在代码中使用char可能会导致问题。

如果您的代码具有从输入中读取文本并将其中的数字转换为数字然后返回这些数字的函数,则必须对函数进行设计,以使其具有某种指示其返回-1或{{ 1}}。一种常见的实现方法是返回两个单独的值:一个指示值是否成功读取,另一个指示值(如果成功)。

返回两个值的方法包括:

  • 返回包含两个成员的结构。
  • 在函数返回值中返回状态指示(成功或失败),并在通过指针传递给函数的对象中返回实际值。

来源:C 2018 7.21.7.1第2和3段说:

  

如果未设置流指向的输入EOF的文件结尾指示符,并且存在下一个字符,则stream函数将获得该字符作为fgetc转换为unsigned char

     

如果设置了流的文件结束指示符,或者流在文件末尾,则设置了流的文件结束指示符,并且int函数返回fgetc。否则,EOF函数从fgetc指向的输入流中返回下一个字符。如果发生读取错误,则将设置流的错误指示符,并且stream函数将返回fgetc