c++ setstate() 和 clear() 函数

#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() 函数将流状态设置成括号内参数所代表的状态,强制覆盖掉流的原状态

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章