Частичная проверка ввода - PullRequest
       43

Частичная проверка ввода

0 голосов
/ 28 апреля 2020

Я пытаюсь реализовать проверку ввода в моем коде.
Я использую .ignore(), а также .clear().
Ввод отклонен, как и должно быть, когда есть что-то еще, кроме число на переднем крае ввода, но если т. е. на входе «12d».
Программа не распознает это как присущую ошибку (хотя в теории это должно быть).

Как я go могу решить эту проблему?

cin >> temp;
if (cin.fail())
{
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),13);
    cout << "Wrong input format, try again: ";
}
else if (!cin.fail())
{
    break;
}

Заранее спасибо!

1 Ответ

0 голосов
/ 28 апреля 2020

Этот код проверяет ввод. Его можно изменить, чтобы получить номер, сначала взяв ввод в std::string, используя getline, а затем просматривая его содержимое. Если формат ввода правильный, создайте stringstream со строкой и используйте оператор >>, чтобы получить значение.

#include <iostream>
#include <cctype>

int main() {
    char ch;
    bool flag1 = true; // true if a non-digit, non-space character is not encountered yet
    bool flag2 = false; // stores if a digit has been encountered
    while(std::cin.get(ch) and flag1)
        if(not isspace(ch))
            if(isdigit(ch))
                flag2 = true;
            else
                flag1 = false;
    std::cout << "Input format is " << ((flag1 and flag2) ? "" : "not ") << "correct!";
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...