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