InsideDarkWeb.com

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 againn";
        std::cin.sync();
    };

} while (std::cin.fail());

При вводе неверного значения программа уходит в бесконечный цикл. При выполнении цикла второй и последующие итерации окно для ввода просто не появляется. Подскажите, в чем может быть проблема?

One Answer

Ну, если состояние 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

Add your own answers!

Related Questions

Не сохраняется положение Switch, Flutter

2  Asked on January 25, 2021 by dmivanov1970

     

Как сделать что бы php воспринимал

0  Asked on January 24, 2021 by kotak

     

PopupMenu по нажатию на кнопку

0  Asked on January 23, 2021 by karpuha

   

Ask a Question

Get help from others!

© 2021 InsideDarkWeb.com. All rights reserved.