Проблема здесь в том, что оператор cin >> ожидает получить вход int
и получает вход char
.
Модуль istream
, экземпляром которого является cin
,использует буферизованный ввод / вывод.Это означает, что пользовательский ввод сначала сохраняется в буфере, а затем считывается из этого буфера, когда пользовательская программа обращается к оператору >>.Обычно, если оператору >> удается прочитать и проанализировать введенные пользователем данные, считанные данные извлекаются из буфера, и следующий вызов оператора >> будет продолжен с того места, где остановился последний вызов.В вашем случае, однако, оператор >> пытается проанализировать ввод пользователя как число и завершается неудачей, поскольку он содержит недопустимые символы, которые не являются цифрами.Оператор >> в этом случае не извлекает прочитанные данные из буфера, и к этим же данным обращаются снова и снова при следующих вызовах оператора >>.
Вы должны очистить буферв случае неудачи, например, предложенный ybungalobill.