我在 Cplusplus.com 上看这篇文章, http: //www.cplusplus.com/reference/iostream/istream/peek/
如果 peek() 到达文件末尾,我仍然不确定它会返回什么。
在我的代码中,只要此语句为真,程序的一部分就应该运行
(sourcefile.peek() != EOF)
sourcefile 是我的 ifstream。
但是,它永远不会停止循环,即使它已经到达文件的末尾。
EOF 不意味着“文件结束”吗?还是我用错了?
原文由 superlazyname 发布,翻译遵循 CC BY-SA 4.0 许可协议
咨询标准,
至于
sgetc()
,和
underflow
,所以是的,在文件末尾返回
EOF
。一个更简单的判断方法是它返回
int_type
。由于int_type
的值只是char_type
加上 EOF 的值,因此如果 EOF 不可能,它可能会返回char_type
。正如其他人提到的,
peek
不会推进文件位置。通常最简单和最好的方法是循环while ( input_stream )
并让无法获得额外的输入终止解析过程。