2015-09-14 346 views
0

只是試圖檢查輸入是否爲此問題的布爾變量(1或0)。cin.fail while循環輸入重新輸入

但是,無論何時觸發while循環(即不通過輸入1或0),它都會通過並說條件爲真。

我希望用戶能夠在錯誤輸入後重新輸入他們的輸入。我會如何去做這件事?

我的代碼:

int main() { 
bool a,b,c; 
    cout << "This program will determine the value of the condition !(a||b) && c " << endl; 
    cout << "Please enter boolean values for a, b, and c. (0=F, 1=T) "; 

    cin >> a; 
     while (cin.fail()) 
     { 
     cin.ignore(1000,'|n'); 
     cin.clear(); 
     cout << "Error: Enter only 0 or 1" << endl; 
     cout << "Enter in a new value for a" << endl; 
     } 
    cin >> b; 
    cin >> c; 
    cout << "The condition !(xx||xx)&&xx "; 
    if(!(a||b) && c) 
    { 
     cout << "is true"; 
    } 
    else 
    { 
     cout << "is false"; 
    } 

    return 0; 
} 

回答

1

你需要把cin >> a;在while循環的結束。

cin.clear()將刪除該錯誤,然後while循環將停止。

像這樣:

cin >> a; 
while (cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(1000,'\n'); 
    cout << "Error: Enter only 0 or 1" << endl; 
    cout << "Enter in a new value for a" << endl; 
    cin >> a; 
} 
+0

謝謝。但是,如果我輸入一個字母,爲什麼它會在我的控制檯中無限重複兩個輸出?有沒有簡單的方法來解決這個問題? – kpnd

+0

@kpnd:在你的問題中有錯字,這個答案的換行字符字面值 - 它應該是''\ n''不是''| n'' ......更好的修復並再試一次。 –

+0

@TonyD感謝您的支票。但是,輸入非數字時無限循環的問題仍然存在。有任何想法嗎? – kpnd