93标准设备的翰入八/输出 标准设备输入不安全,健壮性差,错误的输入类 型导致错误的结果而且是无法预知的错误结果。注意 以下几点。 1.cin为缓冲流。不可能用刷新来清除缓冲区,不 能输错,也不能多输! 2.输入数据类型必须与对应要提取的数据类型一致, 否则出错。在编程中加入对状态字 state的判断 可以提高输入的健壮性。 3.空格和回车都可以作为数据之间的分格符,但如 果是字符型和字符串,则空格。回车符无法读入
9.3 标准设备的输入/输出 标准设备输入不安全,健壮性差,错误的输入类 型导致错误的结果而且是无法预知的错误结果。注意 以下几点。 1.cin为缓冲流。不可能用刷新来清除缓冲区,不 能 输错,也不能多输! 2. 输入数据类型必须与对应要提取的数据类型一致, 否则出错。在编程中加入对状态字state的判断, 可以提高输入的健壮性。 3. 空格和回车都可以作为数据之间的分格符,但如 果是字符型和字符串,则空格。回车符无法读入
93标准设备的翰入八/输出 enum ios statet goodbit=0X00 //流正常 eofbit=0x01: /输入流结束忽略后继提取操 作;或文件结束,已无数据可取 failbit=0X02; //最近的/O操作失败流可恢复 badbit=0x04 //最近的I/O操作非法流可恢复 hardtail=0x08 //I/o出现致命错误流不可恢 复C++60不支持 P四
9.3 标准设备的输入/输出 enum ios_state{ goodbit=0x00; //流正常 eofbit=0x01; //输入流结束,忽略后继提取操 作;或文件结束,已无数据可取 failbit=0x02; //最近的I/O操作失败,流可恢复 badbit=0x04; //最近的I/O操作非法,流可恢复 hardfail=0x08; //I/O出现致命错误,流不可恢 复,VC++6.0不支持 }
93标准设备的翰入八/输出 读取状态有关操作如下: inline int ios: rdstateo const ireturn state: y /读取状态字 inline int ios: operator!o constreturn state&(badbit failbit);] //可用操作符!代替fai inline int ios: badot return state& babbit}//返回非法操作位 inline void ios: clear(int_i lock;state=_unlock (;y //人工设置状态可用来清状态 inline int ios:eof( )const{ return state& eofbit:}/返回流(文件)结束位 inline int ios: fail consttreturn state&(badbit failbit);] /返回操作失败流可恢复这两位 inline int ios:good( consttreturn state==0}//正常返回1否则返回o
9.3 标准设备的输入/输出 读取状态有关操作如下: inline int ios::rdstate() const {return state;} //读取状态字 inline int ios:operator!() const{return state&(badbit|failbit);} //可用操作符!()代替fail() inline int ios::bad(){ return state & badbit;} //返回非法操作位 inline void ios::clear(int _i){ lock();state=_i;unlock();} //人工设置状态,可用来清状态 inline int ios::eof() const {return state&eofbit;} //返回流(文件)结束位 inline int ios::fail() const{return state&(badbit|failbit);} //返回操作失败,流可恢复这两位 inline int ios::good() const{return state==0;} //正常返回1,否则返回0
93标准设备的翰入八/输出 【例93】提高输入的健壮性。输入时需要故意输错,以 测试健壮性。 程序:Ex93cpp P四
9.3 标准设备的输入/输出 【例9.3】提高输入的健壮性。输入时需要故意输错,以 测试健壮性。 程序:Ex9_3.cpp
93标准设备的翰入八/输出 输入流成员函数声明: istream& istream:get(char&)}//提取一个字符放在字符型变量中 istream& istream:get( unsigned char&)//同上一函数 istream& istream:get( signed char&);//同上一函数 istream& istream:get(char* int, char=”n')://提取字符串到串结束 符或指定长度为止 istream&istream: : get(unsigned char *,int, char='\n);//F-E istream&istream:get(signed char *,int, char='ni//A-E stream& Istream: getline(char* int, char=n”)//同上但包括分隔符 istream& istream: getline( unsigned char* int char=”\n)//同上 istream& istream: getline( signed char* lint, char=n”)/同上
9.3 标准设备的输入/输出 输入流成员函数声明: istream&istream::get(char &);//提取一个字符,放在字符型变量中 istream&istream::get(unsigned char &);//同上一函数 istream&istream::get(signed char &);//同上一函数 istream&istream::get(char *,int,char=’\n’);//提取字符串,到串结束 符或指定长度为止 istream&istream::get(unsigned char *,int,char=’\n’); //同上 istream&istream::get(signed char *,int,char=’\n’); //同上 istream&istream::getline(char *,int,char=’\n’);//同上,但包括分隔符 istream&istream::getline(unsigned char *,int,char=’\n’);//同上 istream&istream::getline(signed char *,int,char=’\n’);//同上