1. 程式人生 > >cin.good(),cin.fail(),cin.clear()

cin.good(),cin.fail(),cin.clear()

第一次 ignore 鍵盤輸入 定義 鍵盤 bit 由於 就是 緩沖

cin.good(),原來的值默認為1。如果輸入的值與定義的變量類型不同,則輸出cin.good()為0;

 1 int a;
 2 cout<<"輸入一個字母:"<<endl;
 3 cin>>a; //我們用鍵盤輸入一個char字母,而不是輸入int。這時int型變量中放了char型數據,發生錯誤,所以failbit置1
 4 cout<<"cin.fail()="<<cin.fail()<<endl; //輸出1,說明fail是true,代表出錯。
 5 cout<<"輸入一個數字:"<<endl; //
由於failbit值為1,輸入流不能正常工作 6 cin>>a; //此時我們用鍵盤輸入,但是此處的輸入無效,因為cin.fail是true。 7 cout<<a<<endl; //輸出不確定值,因為剛才cin>>a都沒有效果。所以內存a這個區域不知道是什麽值。 8 cin.clear(); //此處用cin.clear()這個函數進行流標誌復位,使得cin.fail恢復正常。 9 cout<<"cin.fail()="<<cin.fail()<<endl; //此處failbit已為0,說明fail是false,即沒有錯誤了。
10 cout<<"輸入一個數字:"<<endl; 11 //由於上面的步驟僅僅是清除了fail錯誤,但剛才第一次輸入的char字符並沒有從流中清除,那個char類型的東西還存在在緩沖區內,所以當再次進行cin>>a時,又把那個char字符放入變量a中,類型不符導致輸入流又不能正常工作,cin.fail再次崩潰為true。 12 cin>>a; 13 cout<<a<<endl; //還是沒有輸入成功,因此輸出a的話還是輸出不確定值 14 cout<<"cin.fail()="<<cin.fail()<<endl; //
由於剛才緩沖區的錯誤,所以在此處failbit又為1true 15 cin.clear(); //用clear方法再次修復輸入流 16 cin.ignore(); //這次我們用ignore方法取走剛才流中的字符,也就是讓緩沖區的那個char字符清除。 17 cout<<"輸入一個數字:"<<endl; //再次接收輸入,這次輸入int型的數字,類型和變量符合,所以正常輸出了 18 cin>>a; 19 cout<<"a="<<a<<endl; 20 //現在再看一下輸入流的failbit 21 cout<<"cin.fail()="<<cin.fail()<<endl;//輸出0,表明輸入流已恢復正常

代碼引用自 yinlung 的CSDN 博客

cin.good(),cin.fail(),cin.clear()