
C++的iostream标准库介绍
发布时间:2006-08-11 11:43:19 来源:cndev-lab 网友评论 0 条
接下来我们来学习一下输入/输出的状态标志的相关知识,C++中负责的输入/输出的系统包括了关于每一个输入/输出操作的结果的记录信息。这些当前的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型(就像open_mode一样),以下便是它包含的值。
goodbit 无错误
Eofbit 已到达文件尾
failbit 非致命的输入/输出错误,可挽回
badbit 致命的输入/输出错误,无法挽回
有两种方法可以获得输入/输出的状态信息。一种方法是通过调用rdstate()函数,它将返回当前状态的错误标记。例如,假如没有任何错误,则rdstate()会返回goodbit.
下例示例,表示出了rdstate()的用法:
另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态:
下例示例,表示出了上面各成员函数的用法:
如果错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。
示例代码如下:
通常当我们发现输入有错又需要改正的时候,使用clear()更改标记为正确后,同时也需要使用get()成员函数清除输入缓冲区,以达到重复输入的目的。
示例代码如下:
最后再给出一个对文件流错误标记处理的例子,巩固学习,代码如下:
goodbit 无错误
Eofbit 已到达文件尾
failbit 非致命的输入/输出错误,可挽回
badbit 致命的输入/输出错误,无法挽回
有两种方法可以获得输入/输出的状态信息。一种方法是通过调用rdstate()函数,它将返回当前状态的错误标记。例如,假如没有任何错误,则rdstate()会返回goodbit.
下例示例,表示出了rdstate()的用法:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; intmain() { inta; cin>>a; cout<<cin.rdstate()<<endl; if(cin.rdstate()==ios::goodbit) { cout<<"输入数据的类型正确,无错误!"<<endl; } if(cin.rdstate()==ios_base::failbit) { cout<<"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!"<<endl; } system("pause"); } |
另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态:
| bool bad(); bool eof(); bool fail(); bool good(); |
下例示例,表示出了上面各成员函数的用法:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; intmain() { inta; cin>>a; cout<<cin.rdstate()<<endl; if(cin.good()) { cout<<"输入数据的类型正确,无错误!"<<endl; } if(cin.fail()) { cout<<"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!"<<endl; } system("pause"); } |
如果错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。
示例代码如下:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; intmain() { inta; cin>>a; cout<<cin.rdstate()<<endl; cin.clear(ios::goodbit); cout<<cin.rdstate()<<endl; system("pause"); } |
通常当我们发现输入有错又需要改正的时候,使用clear()更改标记为正确后,同时也需要使用get()成员函数清除输入缓冲区,以达到重复输入的目的。
示例代码如下:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> usingnamespacestd; intmain() { inta; while(1) { cin>>a; if(!cin)//条件可改写为cin.fail() { cout<<"输入有错!请重新输入"<<endl; cin.clear(); cin.get(); } else { cout<<a; break; } } system("pause"); } |
最后再给出一个对文件流错误标记处理的例子,巩固学习,代码如下:
| //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include<iostream> #include<fstream> usingnamespacestd; intmain() { ifstreammyfile("c://1.txt",ios_base::in,0); if(myfile.fail()) { cout<<"文件读取失败或指定文件不存在!"<<endl; } else { charch; while(myfile.get(ch)) { cout<<ch; } if(myfile.eof()) { cout<<"文件内容已经全部读完"<<endl; } while(myfile.get(ch)) { cout<<ch; } } system("pause"); } |
推荐阅讯
- C/C++中利用空指针(NULL),提高程序运行效率
- exit()与return()函数的差别
- 用Viusal C++实现字符串分割函数
- 伪随机数生成及在VC++中的实现
- Borland 发布C++ Builder 2006 RAD 环境
- C++中理解“传递参数”和异常之间的差异
- 在VC++中实现自动连续播放多媒体文件
- C++类的继承与多重继承的访问控制
- c/c++中的字符指针数组,指向指针的指针的含
- Winsocket编程之套接字原理
阅读排行
- 1.Borland 发布C++ Builder 2006 RAD 环境
- 2.C/C++程序员应聘常见面试题深入剖析
- 3.Visual C++常用数据类型转换详解
- 4.C++中的 static 关键字
- 5.利用VC++实现局域网实时视频传输
- 6.浅谈C/C++内存泄漏及其检测工具
- 7.英国投票否决C++/CLI 微软强攻ISO标准受挫
- 8.VC++下用MSComm控件实现串口通讯
- 9.伪随机数生成及在VC++中的实现
- 10.VC++编程实现对波形数据的频谱分析
专题教程
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
- Picasa中文版_Picasa教程 专题:清除流氓软件
- Firefox专题 seo搜索引擎优化专区
- 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
