cin.fail не работает при вводе цифр и букв - PullRequest
1 голос
/ 29 сентября 2019

Я работаю над простой проверкой данных как части ввода чисел в массив.Прямо сейчас это работает по большей части за исключением одного случая - когда я ввожу число, сопровождаемое буквой, выдается сообщение об ошибке, которое я создал, но число все еще вводится в массив.Еще больше меня смущает то, что он функционирует так, как задумано, когда я компилирую программу в XCode, но проблема, которую я описываю, проявляется только тогда, когда я компилирую программу с помощью g ++.Любые мысли будут очень цениться.Вот моя функция, которая, я думаю, дает мне проблему.

float getInput()
{
    float input;
    std::cin >> input;
    if (std::cin.fail())
    {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "type char/str not allowed, enter int" << '\n';
        return getInput();
    }
    else
        return input;
}

1 Ответ

0 голосов
/ 30 сентября 2019

Понял.По сути, сейчас не время использовать рекурсию.Я поместил оператор if в цикл while, добавил второй cin в конец цикла и перенес возврат из цикла.Это позаботилось об этом.Спасибо за предложение использовать вместо этого цикл.

...