Проверка правильности ввода - PullRequest
2 голосов
/ 14 ноября 2010

В настоящее время я работаю над программой на c ++ и хочу проверить, является ли введенный пользователем ввод действительным. В настоящее время мой код работает, если пользователь вводит правильный ввод или если пользователь вводит небольшое неверное число, моя программа скажет пользователю, что ввод недействителен. Теперь моя проблема в том, что когда пользователь вводит несколько символов / букв или большое число, содержащее 9 или более цифр, моя программа входит в бесконечный цикл, сообщая им сообщение об ошибке. Вот мой код:

//for (;;)
    while (flag== false)
    {
        cin >> Input;
        if (Input <= choice.size()-1)
        {
            flag = true;
    //  break;
        }

        else
        {
            cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n";
            userInput = 0;
        }
    }

Как вы можете видеть, я также пытался выполнить цикл for infinate, но он дает мне те же результаты. В моем коде я печатаю вектор на экран. В основном пользователь выбирает значение вектора, чтобы использовать его.

Я открыт для любых предложений. Спасибо

1 Ответ

2 голосов
/ 14 ноября 2010

Если пользователь вводит что-то, что не может быть прочитано в Input (из вашего кода не ясно, что тип Input), этот ввод будет зависать во входном потоке, и каждая итерация цикла будет не удается прочитать на входе, пока вы не очистите поток.

Вам необходимо очистить флаги потока и избавиться от любого плохого ввода, ожидающего в потоке после каждого сбоя при чтении. Попробуйте что-то вроде этого:

while(!(cin >> Input) || Input <= choice.size()-1)
{
  cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n";
  cin.clear(); // Clears the input stream fail flag
  cin.ignore(100, '\n'); // Ignores any characters left in the stream
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...