Проверка двоичного ввода в C ++ - PullRequest
0 голосов
/ 13 декабря 2018

Привет, я пытаюсь проверить ввод пользователя, ища ввод 1 или 0. Кажется, что часть проверки строки работает нормально, но любой ввод на основе целых чисел имеет консольное окно, принимающее ввод, но не перепрыгивающее через оператор if, возвращая ввод (maxItems).Вот код:

int RollingStats::GetOption() 
{
       int maxItems;

        std::cout << "Please enter either to store data individually (0) or as a range(1)" << std::endl;

        std::cin >> maxItems;

        if ((!(std::cin >> maxItems) && maxItems != 0) | (!(std::cin >> maxItems) && maxItems != 1))
        {
            std::cin.clear();

            std::cin.ignore(100, '\n');

            std::cout << "Please enter an input of either 0 or 1" << std::endl;

            GetOption();
        }
            return maxItems;
} 

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 13 декабря 2018

Некоторые проблемы в коде:

  • Использование cin трижды (один раз перед if и дважды в условии if) потребует от пользователя ввода трижды
  • Использование логического ИЛИ (||) вместо побитового или (|) в проверке состояния if.
  • Не проверяется, является ли ввод целым числом

Вместо этого вы можете сделать что-то вроде этого:

int RollingStats::GetOption()
{
    int maxItems;
    std::cout << "Please enter either to store data individually (0) or as a range(1)" << std::endl;
    std::cin >> maxItems;

    if(!std::cin.good() || maxItems != 0 && maxItems != 1)
    {
        std::cin.clear();
        std::cin.ignore(100, '\n');
        std::cout << "Please enter an input of either 0 or 1" << std::endl;
        maxItems = GetOption();
    } 
    return maxItems;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...