Cpp Primer<<学习IO标准库--条件状态_5

来源:互联网 发布:mac雷蛇驱动安装失败 编辑:程序博客网 时间:2024/05/22 15:21

条件状态

strm::iostate 机器相关的整形名,由各个iostream类定义,用于定义条件状态 strm:badbit strm::iostate类型的值,用于指出被破坏的流 strm::failbit strm ::iostate类型的值,用于指出失败的IO操作 strm::eofbit strm::iostate类型的值,用于支出流已经到达文件结束符 s.eof() 如果设置了流s的eofbit值,则该函数返回true s.fail() 如果设置流s的failbit值,则该函数返回true s.bad() 如果设置了流s的badbit值,则该函数返回true s.good() 如果流s处于有效状态,则该函数返回true s.clear() 将流s中的所有状态值都重设为有效状态 s.clear(flag) 将流s中的某个指定条件状态设置为有效,flag的类型为strm::iostate s.setstate(flag) 给流s添加指定条件。flag的类型为strm::iostate s.rdstate() 返回流s的当前条件,返回值类型strm::iostate

1.条件状态

所有流对象都包含一个条件状态成员,该成员有setstate和clear操作管理。setstate操作用于改变条件成员的状态,clear操作将所有条件重设为有效状态。使用setstate,操作操作可打开某个指定的条件,用于表示某个问题的发生。除了添加的标记状态,setstate将保存其它已存在的状态变量不变。
这个状态成员为iostate类型,由各个iostream类分别定义的机器相关的整形。
该状态成员以二进制位(bit)的形式使用。

每个IO类还定义了三个iostate类型的常量值,分别表示特定的位模式,该常量值用于支出特定类型的IO条件,可与位操作符一起使用,方便一次操作检查或设置多个标志。
badbit标志着系统级的故障,如无法恢复的读写错误。
流的状态有bad、fail、
eof和good操作解释。前三者中任意一个为true,则检查本身将像是该流处于错误状态。否则,good操作将返回true.
clear和setstate操作用于改变条件成员的状态。

2.流状态查询和控制

int ival;// read cin and test only for EOF:loop is executed even if there are other IO failureswhile (cin >> ival,!cin.eof()) {    if (cin.bad())  //  input stream si corrupted;bail out        throw runtime_error(“IO stream corropted”);    if (cin.fail()) {                   //  bad input        cerr << “bad data,try again”;   //  warn the user        cin.clear(istream::failbit); // reset the stream        continue;                   //  get next input    }  //ok to process ival}

3.条件状态的访问

rdstate成员函数返回一个iostate类型的值,该值记录当前流的条件状态:

//remember curret of cinistream::iostate old_state = cin.rdstate();cin.clear();process_input();  // use cincin.clear(old_state);   //  now reset cin to old state

4.多种状态的处理

需要设置多个状态二进制可以多次调用setstate或者clear函数实现,或者是使用按位或操作符(|)一次调用中生成多个状态位。按位或操作使用其操作数的二进制位模式产生一个整型数值。

is.setstate(ifstream::badbit | ifstream::failbit); //sets both the badbit and the failure

同时打开is对象的failbit和badbit且都设置为1。

0 0
原创粉丝点击