![](/img/trans.png)
[英]cin.clear(ios_base::failbit) vs cin.setstate(ios_base::failbit)
[英]Why cin.clear() is not reseting the failbit state?
#include <iostream>
using namespace std;
int main(){
int const size = 10;
char input_1[size];
char input_2[size];
cout << "Enter input 1: " << endl;
cin.get(input_1, size);
cin.get();
cin.clear();
cout << "Enter input 2: " << endl;
cin.get(input_2,size);
cout << "input_2 = " << input_2 << endl;
return 0;
}
輸出 1 ~/cplusplus $ ./conundrum.o
輸入輸入 1:
qwe
輸入輸入 2:
阿斯達
input_2 = asd
輸出 2
~/cplusplus $ ./conundrum.o
輸入輸入 1:
輸入輸入 2:
輸入_2 =
〜/ cplusplus $
當我輸入連續的字符流時,該程序按預期輸出。 OUTPUT 1 顯示預期的輸出。 但是當我只在第一個輸入時按 Enter 鍵時,此代碼不會要求 input_2 並拋出一個空的 input_2,如 OUTPUT 2 所示。根據我的理解,換行符應該已被 cin.get() 和 failbit 集消除到某些異常狀態(在 input_1 中沒有任何可存儲的內容之后)應由 cin.clear() 重置以准備第二個 cin.get(input_2,...)。 問題出在哪兒?
你應該做這個改變
cin.get(input_1, size);
cin.clear();
cin.get();
在您的代碼中cin.get()
失敗,因為已經設置了失敗位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.