我正在尝试从文件中读取一系列负数。 数字-1重复了n次,我也读取了所有数据,直到EOF。 由于数据是-1,EOF也是-1,如何处理这种情况?
答案 0 :(得分:2)
标准C字符输入函数返回一个unsigned char
或EOF
的值。因此,要使用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
。