源状态的控制和查询

流状态的控制和查询
C++ Primer 上的一段程序:
int ival;

while(cin>>ival,!cin.eof())
{
if(cin.bad())
throw runtime_error("IO stream corrunpt");
if(cin.fail())
{
cerr<<"bad data,try again";
 // cin.clear(istream::failbit);
                 //这里改成这样才摆脱死循环
                        cin.clear();
                        cin.sync();
                        
                        continue;

}
}

书上说clear()的作用是将条件重置为有效状态(重置为goodbit)。什么是有效状态?clear操作后cin有什么变化?
c++

------解决方案--------------------
cin是ifstream类的一个对象,相当于:
istream cin;
而istream时面有个叫iostate的int
当iostat为0时,流可用
当文件读取失败后会把iostat和failbit或badbit或eofbit做位或(
------解决方案--------------------
)操作,导致iostate变为非0值。
当使用cin输出的时候,会判断iostate是否为0。如果不为0就证明流不可用。就不能输出。
------解决方案--------------------
cin是ifstream类的一个对象,相当于:
istream cin;
而istream时面有个叫iostate的int
当iostat为0时,流可用
当文件读取失败后会把iostat和failbit或badbit或eofbit做位或(
------解决方案--------------------
)操作,导致iostate变为非0值。
当使用cin输出的时候,会判断iostate是否为0。如果不为0就证明流不可用。就不能输出。