cin stream错误

par*_*c65 2 c++

int main()
{
    int i;

    if (cin >> i)
    {
        //ok
    }
    else
    {
        //error
        cin.setstate(std::ios_base::goodbit);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nco 5

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

所以假设:

Assume a very simple state mechanism:
00
^^
||
|\
| the fail bit
 \
   the ok bit
Run Code Online (Sandbox Code Playgroud)

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

点击参考.