源状态的控制和查询
流状态的控制和查询C++ Primer 上的一段程序:int ivalwhile(cinival,!cin.eof()){if(cin.bad())throw r
流状态的控制和查询
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就证明流不可用。就不能输出。