2015-09-14 4 views
0

Просто попытайтесь проверить, что вход является логической переменной (1 или 0) для этой проблемы.cin.fail while loop input Re-Entry

Однако, всякий раз, когда включается цикл 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; в конце вашего цикла.

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