读书人

源状态的控制和查询

发布时间: 2013-09-24 10:59:52 作者: rapoo

流状态的控制和查询
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就证明流不可用。就不能输出。

读书人网 >C++

热点推荐