1.4种条件状态
badbit 用来指出流已经崩溃,属于系统级错误,如不可恢复的读写错误。
failbit 表示一个io操作失败了,比如读取数字却读取的是字符,这是可以恢复的
eofbit 用来表示文件达到文件结尾,这也是可以恢复的
goodbit 表示流的状态正常
注意的是,一但流发生错误,其上后续的io操作都会失败,只有流属于无错状态时,我们才可以
用来读取数据,写入数据。
看下面的代码
#include<iostream>
using namespace std;
void main()
{
int a, b;
cin >> a;//假设输入的是一个字符
cout << cin.fail() << endl;//那么这里应该输出1,因为这是failbit的错误
cout << cin.rdstate() << endl;//这是输出当前状态的函数,流正常那么输出0,这里输出1表示failbit在第一个二进制位上
getchar();//注意cin会在缓冲区流下换行符
cin >> b;//如果输入的是字符那么这里就不能使用了
system("pause");
}
那么告诉大家,failbit在第一位,eofbit在第二位,badbit在第三位,注意没有第四位表示goodbit,cin.good()返回1
说明流正常,注意的是遇到文件结尾代表failbit与badbit都被置位
2.clear函数与ignore函数
int a, b;
cin >> a;
cin.clear();//把可恢复的流都恢复
cin.ignore();//注意这个函数的原型是istream& ignore(streamsize n=1;int delim=EOF)
//读取前n个字符或者在遇到delim字符就停止,把读取的东西丢掉
//这里相当于把换行符去掉
cin >> b;
注意ignore,你可以设置一个足够大的数字,来把缓冲区全部刷新
3.缓冲区
看下面的代码
cout << "hello" << endl;//注意endl往缓冲区加入一个空字符然后刷新缓冲区
cout << "hello" << flush;//flush直接刷新缓冲区
cout << unitbuf;//使用unitbuf操作符后,所以输出操作都会立即刷新缓冲区
cout << nounitbuf;//关闭unitbuf操作符
4.流的关联
cin.tie(&cout);//只是用来展示,表示cin和cout绑定在一起
ostream *old_tie = cin.tie(nullptr);//cin不在与其他流关联,解除绑定后会提升cin的速度
int a;
cin >> a;