cin stream错误

时间:2011-05-18 23:59:47

标签: c++

int main()
{
    int i;

    if (cin >> i)
    {
        //ok
    }
    else
    {
        //error
        cin.setstate(std::ios_base::goodbit);
    }
}

为什么我不能通过setstate()设置goodbit来清除failbit而不是cin.clear()?

1 个答案:

答案 0 :(得分:5)

因为setstate将当前状态与您通过按位OR传递的任何状态组合在一起,所以失败位不会被清除(设置为零)。

所以假设:

Assume a very simple state mechanism:
00
^^
||
|\
| the fail bit
 \
   the ok bit

当状态为setstate(okbit)时,01只会给你11(看看ma,失败位仍然设置),所以你真正做的就是搞砸了内部流状态。你应该完全避免使用setstate

Click供参考。