C++学习笔记之基本IO类
2018-01-19 15:05
169 查看
理清IO的基本概念
iostream是一个标准库,提供IO机制。
iostream库包含两个类:istream和ostream,分别表示输入流和输出流。
一个“流”就是一串长短不定的字符序列,从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》
iostream是一个标准库,提供IO机制。
iostream库包含两个类:istream和ostream,分别表示输入流和输出流。
一个“流”就是一串长短不定的字符序列,从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》
相关文章推荐
- C++入门学习笔记(一)--面向对象基本概念
- c++ Premier 学习笔记(unit2 变量和基本类型 -引用
- C++学习笔记二:基本内置类型
- (c/c++学习笔记一) sizeof基本知识
- Armadillo C++ linear algebra library 学习笔记(2)——矩阵的基本操作(1)
- C++ Primer 学习笔记_5_变量和基本类型(续2)
- C++基础学习笔记----第七课(面向对象的基本概念)
- C++学习笔记---基本内置类型
- C++学习笔记——变量和基本类型
- Armadillo C++ linear algebra library 学习笔记(3)——矩阵的基本操作(2)
- c++学习笔记—单链表基本操作的实现
- C++学习笔记:异常的基本语法
- C++学习笔记 基本数据类型
- C++学习笔记---基本类型
- c++学习笔记—二叉树基本操作的实现
- C++基础的不能再基础的学习笔记——顺序容器(基本操作)
- C++学习笔记-IO类
- C++学习笔记一 (基本数据类型)
- 深入浅出MFC学习笔记:(第一章:win32基本概念,第二章:C++的重要性质)
- C++学习笔记 | 第二章 变量和基本类型 | (5)