У меня есть бесконечный цикл while, где у пользователя запрашивается номер.
Моя проблема очень проста: если ввод является строкой, я хочу повторно запросить ввод у пользователя, выдав сообщение «Введите правильный выбор:».
Я искал, и похоже, что мне нужно проверить cin.fail()
, затем позвонить cin.clear()
и cin.ignore()
.
Вот мой код:
int main() {
int choice;
bool failed = false;
while (true) {
if (failed) cout << "Enter a valid choice: ";
else cout << "Enter a number: ";
cin >> choice;
if (cin.fail()) {
cin.clear();
cin.ignore();
failed = true;
}
}
return 0;
}
Однако это не решает мою проблему. Конечно, он не печатается бесконечно, но для каждой буквы лишняя буква печатает еще одну "Enter a valid choice:"
Похоже, мне нужно звонить cin.ignore()
за каждое дополнительное письмо.
Есть ли другой способ сделать это?