【问题标题】:C++: end-of-file interpretation when using std::cin as a conditionC++:使用 std::cin 作为条件时的文件结尾解释
【发布时间】:2020-07-13 04:14:58
【问题描述】:

我知道我们可以使用 std::cin 作为条件,例如 in

while (std::cin >> value)

使用 std::cin 作为条件将调用成员函数std::ios::operator bool。它说 它“返回是否设置了错误标志(failbit 或 badbit)”,其中不包括 eofbit。尽管如此,传递文件结尾(通过 Ctrl+d)会终止循环。为什么? failbit 或 badbit 也可以设置 eofbit 吗?

我也找到了this 的解释,但是在 C++ Reference 中它特别说“这个函数不返回与成员好的相同”

【问题讨论】:

  • Eofbit 并不是真正的错误标志。它告诉你为什么会发生错误——输入失败(所以设置了失败位),因为读取尝试在看到有效的文本序列之前就到达了文件的末尾。

标签: c++ c++11 while-loop iostream flags


【解决方案1】:

上面的循环不测试文件结尾。它测试读取值失败,文件结尾只是其中一个可能的原因。即使文件结尾也不一定会导致读取值失败,想象一下读取一个整数,其中数字在文件末尾终止,即使您到达文件末尾,您仍然会读取一个整数。

最重要的是,由于任何原因未能读取值会设置失败位,并且此循环会对此进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多