2011-05-18 31 views
2
int main() 
{ 
    int i; 

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

我为什么不能设置goodbit通过setstate这()来清除掉failbit,而不是cin.clear()?CIN流错误

回答

5

因为setstate将当前状态与您传递的任何状态结合起来,并且按位OR,如果失败位未被清除(设置为零)。

所以假设:

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

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

Click仅供参考。

+0

备案:'goodbit'实际上是零,并且是状态位的初始值。 “setstate”工作原理的描述非常好。 – 2011-05-19 07:35:28