#include <iostream>
#include <string>
using namespace std;
int main()
{
auto st1 = cin.rdstate(); //记住cin流的原始状态
cout << "old state of stream is: "<< st1 << endl; //输出原始状态,因为是无错的,所以0
表示值为:goodbit
int c;
cin >> c; //此处输入一个a,那么流发生错误,
cout << cin.rdstate() << endl; //因为读入fail,所以cin.rdstate() 为
// failbit,也就是4
auto st2 = cin.rdstate(); //记住此时的cin状态
cin.clear(); //将cin清除所有错误标志位,就是值回到goodbit
cout << cin.rdstate() << endl; //输出复位错误位后的状态,0
cin.setstate(st2); //将st2的状态追加到cin状态中,failbit位被追加
cout << cin.rdstate() << endl; //输出追加后的状态 即 cin.rdstate = failbit
return 0;
}
setstate()函数并不强制覆盖流的原状态,而是将括号内参数所代表的状态叠加到原始状态上。
clear() 函数将流状态设置成括号内参数所代表的状态,强制覆盖掉流的原状态。