cin stream error

cin stream error

本文关键字:error stream cin      更新时间:2023-10-16
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(看,妈妈,失败位仍然设置),所以实际上你所做的只是搞砸内部流状态。你真的应该完全避免使用setstate

点击查看参考。