Stack Overflow на русском Asked by jdenv on January 14, 2021
Есть функция, считывающая ввод пользователя
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 againn";
std::cin.sync();
};
} while (std::cin.fail());
При вводе неверного значения программа уходит в бесконечный цикл. При выполнении цикла второй и последующие итерации окно для ввода просто не появляется. Подскажите, в чем может быть проблема?
Ну, если состояние 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 againn"
std::cin.clear();
} else {
std::cout << "Incorrect input - i < 0. Please try againn";
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'n');
}
Correct answer by Harry on January 14, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP