fgetc()函数从Ubuntu中的文本文件中读取字符。
EoF之前的最后一个字符是代码= -1。
那是什么意思? 在文本编辑器文件中似乎没问题,最后没有奇怪的符号。while (!feof(fp))
{
c = fgetc(fp);
printf("%c %i\n", c, c);//
}
答案 0 :(得分:1)
feof
表示您已尝试阅读过去文件末尾 - 这意味着您首先需要访问它。因此,只有在您尝试阅读并且系统意识到您最终完成后它才会起作用。如果您尝试读取文件末尾,fgetc
会返回什么? EOF
(方便地-1
- 这就是fgetc
返回int
而不是char
的原因。
所发生的事情是你进入循环 - 因为你还没有尝试在最后读过去 - 并且调用fgetc
,它返回-1,因为你试图读过文件的末尾。下一次循环,feof
告诉你,你已经到了文件的末尾,并试图读过去,然后你就会爆发。
您应该阅读您打算使用的函数的文档:feof
和fgetc
文档解释这一点。但即使他们没有,一个简单的谷歌搜索也会回答你的问题:Why is “while ( !feof (file) )” always wrong?。