在看C++ PRIMER时的输入输出流一节中,看到流状态的标志位设置及清除时。
在调试流状态时,有一点未明白,下边是调试代码。
#include
#include
#include
using namespace std;
int main()
{
int itemp = 0;
while(cin >> itemp, !cin.eof())
{
if(cin.bad())
throw runtime_error("IO stream corrupted");
if(cin.fail())
{
cerr << "bad data, try again" << endl;
cin.clear();
continue;
}
cout << itemp << endl;
}
return 0;
}
当输入数值型数据时,一切正常。但是输入字符数据时,程序进入死循环,一直输出
bad data, try again
用cin.clear(istream::failbit),错误状态一直清除不掉,为何?