int main()
{
int i;
if (cin >> i)
{
//ok
}
else
{
//error
cin.setstate(std::ios_base::goodbit);
}
}
为什么我不能通过 setstate() 设置 goodbit
来清除 failbit
而不是 cin.clear()?
最佳答案
因为 setstate
将当前状态与您通过按位 OR
传递的任何状态组合在一起,因此失败位不会被清除(设置为零) .
所以假设:
Assume a very simple state mechanism:
00
^^
||
|\
| the fail bit
\
the ok bit
当你的状态为 01
时执行 setstate(okbit)
只会给你 11
(看,ma,失败位仍然是set)所以实际上你所做的就是搞乱内部流状态。您确实应该完全避免使用 setstate
。
Click供引用。
关于c++ - cin流错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052385/