【发布时间】:2022-01-15 06:25:40
【问题描述】:
我目前正在学习while (cin >> num) 的工作原理,我发现有两个步骤。
第一个是 operator>> 函数返回一个带有错误状态的 istream 对象,第二个是 bool 转换器,将 istream 对象转换为 bool 取决于它的状态。
但我发现在 bool convert 函数中,只有在设置了 failbit 或 badbit 时它才会返回 0,这让我感到困惑。并且 operator>> 函数如果读取 EOF 将设置 eofbit。
布尔转换函数:https://www.cplusplus.com/reference/ios/ios/operator_bool/
操作员>>函数:https://www.cplusplus.com/reference/istream/istream/operator%3E%3E/
在这种情况下,在我输入 EOF 后,布尔转换器应该返回 1,因为未设置故障位和坏位。
因此,我使用下面的程序来检查输入 EOF 后错误位实际发生了什么。 我发现进入EOF后failbit会被设置!!
所以我想知道是否有人可以帮助我理解为什么要设置故障位?
#include <iostream>
using namespace std;
int main()
{
int num;
cin >> num;
cout << cin.eof() << " " << cin.fail() << " " << cin.bad() << endl;
return 0;
}
输入:^Z(在使用 qt creator 的 windows 上,非 qt c++ 项目) 输出:1 1 0
输入:^D(在使用 qt creator 的 windows 上,非 qt c++ 项目) 输出:0 1 0
【问题讨论】:
标签: c++ linux qt operating-system iostream