ifstream.peek() 到达文件末尾时的返回值

新手上路,请多包涵

我在 Cplusplus.com 上看这篇文章, http: //www.cplusplus.com/reference/iostream/istream/peek/

如果 peek() 到达文件末尾,我仍然不确定它会返回什么。

在我的代码中,只要此语句为真,程序的一部分就应该运行

(sourcefile.peek() != EOF)

sourcefile 是我的 ifstream。

但是,它永远不会停止循环,即使它已经到达文件的末尾。

EOF 不意味着“文件结束”吗?还是我用错了?

原文由 superlazyname 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

咨询标准,

返回: traits::eof() 如果 good()false 。否则,返回 rdbuf()->sgetc()

至于 sgetc()

返回:如果输入序列读取位置不可用,则返回 underflow()

underflow

如果挂起的序列为空,则函数返回 traits::eof() 以指示失败。

所以是的,在文件末尾返回 EOF

一个更简单的判断方法是它返回 int_type 。由于 int_type 的值只是 char_type 加上 EOF 的值,因此如果 EOF 不可能,它可能会返回 char_type

正如其他人提到的, peek 不会推进文件位置。通常最简单和最好的方法是循环 while ( input_stream ) 并让无法获得额外的输入终止解析过程。

原文由 Potatoswatter 发布,翻译遵循 CC BY-SA 2.5 许可协议

想到的事情(没有看到你的代码)。

  • EOF 的定义可能与您预期的不同
  • sourcefile.peek() 不推进文件指针。您是否以某种方式手动推进它,或者您是否一直在看同一个角色?

原文由 T.E.D. 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏