Почему цикл продолжается бесконечно при некорректном вводе? c++ - Вопросы по С+
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Почему цикл продолжается бесконечно при некорректном вводе? c++

Регистрация
23 Дек 2013
Сообщения
69
Репутация
-3
Спасибо
0
Монет
0
При неправильном вводе оператор ">>" блокирует поток ввода, у которого он был вызван. Непрочитанные данные сохраняются в потоке, а повторный вызов этого оператора пропускается из за блокировки.
Для снятия блокировки нужно выполнить метод clear() потока.

cin.clear(); //ошибка сбрасывается / блокировка снимается а далее обычно требуется отчистить поток от ошибочных данных методом ignore, чтобы эти данные повторно не запороли ввод. cin.ignore(1000,'\n'); //удаляет строку или 1000 символов (что короче) Отловить ошибку или блокировку можно простым преобразованием потока в bool:
if (cin) ... //if сработает если все в порядке
if (cin >> type) ... //if сработает если все в порядке if (!(cin >> type)) //попытка неудачного ввода выполнит следующее:
{
cout
 
Сверху Снизу