2016-10-25 6 views
0

У меня есть простое меню на C++ с возможностью выбора параметров меню. Если пользователь вводит что-либо, кроме действительного int, например char или double, программа переходит в бесконечный цикл. Мой код выглядит следующим образом.Меню C++ застряло в бесконечности, если пользователь вводит недопустимое целое число

#include <iostream> 

using namespace std; 

int main() 
{ 
    int selection; 
    do { 
     cout << "1) Update inventory" << endl; 
     cout << "2) Sell items" << endl; 
     cout << "3) List inventory" << endl; 
     cout << "4) Quit" << endl; 

     cout << "Please select an option: "; 
     cin >> selection; 
    } 
    while (selection != 4); 

    return 0; 
} 

Почему недействительные ответы вызывают бесконечный цикл и как его можно предотвратить?

+0

Вы хотите проверить правильность потока, например 'if (! Cin) {/ * handle error * /}'. См. Также [Почему iostream :: eof внутри условия цикла считается неправильным?] (Http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong). – jaggedSpire

ответ

-1

Перед

cin >> selection; 

Место эти две линии:

cin.clear(); 
cin.ignore(); 

Это очистит буфер и разрешить ввод быть приняты.

+2

Это не то, что он просил. Он спрашивает о некорректном вводе, например, вводимый символ вместо числа – dwcanillas

+0

Я понимаю. Это решит проблему. Но @jaggedSpire прав. –