C++:使用 std::cin 作为条件时的文件末尾解释

C++: end-of-file interpretation when using std::cin as a condition

提问人:Argos 提问时间:4/1/2020 更新时间:4/1/2020 访问量:67

问:

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

while (std::cin >> value)

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

我也找到了这个解释,但在 C++ 参考中,它特别说“此函数返回与成员 good 不同”

C++ C++11 while 循环 iostream 标志

评论

1赞 Pete Becker 4/1/2020
Eofbit 并不是真正的错误标志。它告诉您发生错误的原因 -- 输入失败(因此设置了 failbit),因为在看到有效的文本序列之前,读取尝试命中了文件的末尾。

答:

1赞 john 4/1/2020 #1

上面的循环不测试文件末尾。它测试无法读取值,文件末尾只是造成这种情况的一个可能原因。即使文件末尾也不一定会导致无法读取值,想象一下读取一个整数,其中数字在文件末尾终止,即使您点击文件末尾,您仍然读取整数。

底线是,由于任何原因未能读取值都会设置失败位,此循环对此进行测试。