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() 函數將流狀態設置成括號內參數所代表的狀態,強制覆蓋掉流的原狀態

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