cin не работет при повторном обращении
Есть функция, считывающая ввод пользователя
int i{ 0 };
do
{
std::cin.clear();
std::cout << "How many numbers do you want?\n";
std::cin >> i;
std::cin.ignore();
if (std::cin.fail() or i < 0)
{
std::cout << "Incorrect input. Please try again\n";
std::cin.sync();
};
} while (std::cin.fail());
При вводе неверного значения программа уходит в бесконечный цикл. При выполнении цикла второй и последующие итерации окно для ввода просто не появляется. Подскажите, в чем может быть проблема?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, если состояние fail, то ignore просто не будет работать.
Потом, если бы и работал - то вы же попросили игнорировать один символ. Но все равно, пока не будет вызван clear - все операции будут просто игнорироваться.
Вам надо примерно такое:
int i;
for (;;) {
std::cout << "How many numbers do you want?\n";
if ((std::cin >> N).good() && (i >= 0)) break;
if (std::cin.fail())
{
std::cout << "Incorrect input. Please try again\n"
std::cin.clear();
} else {
std::cout << "Incorrect input - i < 0. Please try again\n";
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
}