您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记之基本IO类

2018-01-19 15:05 169 查看
理清IO的基本概念
iostream是一个标准库,提供IO机制。
iostream库包含两个类:istreamostream,分别表示输入流和输出流。
一个“流”就是一串长短不定的字符序列,从IO设备读出或写入IO设备,它表达的是随时间推移,字符顺序生成或消耗。
cin是istream的一个对象,cout、cerr、clog是ostream的三个对象。
cin(也称标准输入,standard input):程序从cin中读取数据。
cout(也称标准输出,standard output):程序向cout写入数据。
cerr(也称标准错误,standard error):将程序错误信息写入到cerr中。
clog:输出程序运行时的一般性信息。

这些对象都是关联到用户的控制台窗口(console)的:
读取cin,就是从窗口中读入。
向cout、cerr、clog写入,就是向窗口写入。

>>运算符:从一个istream对象(如cin)读取输入数据。

<<运算符:向一个ostream对象(如cout)写入输出数据。
int a;
cin>>a;
cout<<a<<endl;
iostream库还有个getline函数 ,从istream读取一行数据并存入给定的string对象。
string line;
while(getline(cin,line))
cout<<line<<endl;

需要注意的几点:
不能拷贝或对IO对象赋值,因为不能拷贝IO对象,所以也不能将形参或者返回类型设置为流类型
进行IO操作的函数通常以引用方式传递和返回流。
读写一个IO对象会改变其状态,因此传递和返回的引用不能是const

流的条件状态
一个IO错误的例子:
int ival;
cin>>ival;
如果我们输入的不是数字而是字符,cin会进入错误状态。正确的做法是在使用一个流之前检查它是否处于良好状态:
while(cin>>ival)
{
……
}
但仅将流作为条件使用,我们只能知道流是否有效,而无法知道发生了什么错误,有时候我们需要针对不同的错误采取不同的应对措施。
IO库定义了一个iostate类,提供了表达流状态的完整功能。
流的条件状态如下:
badbit:流已崩溃,是系统级错误,一旦被置位,流就无法继续使用。
failbit:一个IO操作失败了,这种问题通常可修正,流可继续使用,到达文件结束处该状态也置位。
eofbit:流到达了文件结束处。
goodbit:流未处于错误状态。

可以把它们理解为一个4位的寄存器,每个状态占一个位,badbit、failbit、eofbit置位时状态有效,而goodbit则是复位时状态有效。

管理条件状态
几个主要函数(s为流,如cin):
s.clear():将流s所有条件状态位复位。
s.clear(flags):根据flags标志位,将流s中对应条件状态位复位,flags类型为iostate。
s.setstate(flags):根据flags标志位,将流s中对应条件状态为置位,flags类型为iostate。
s.rdstate():返回流s当前条件状态,返回值类型为iostate。

使用示例:

auto old_state=cin.rdstate();
cin.clear();
//使用cin
process_input(cin);
cin.setstate(old_state);
带参数版本的clear函数使用方法:cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit);上面的代码将failbit位和badbit位置位。

参考资料:《C++ Primer》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: