TransWikia.com

cin не работет при повторном обращении

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());

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

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!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP