如何确保用户输入正确的输入类型?

问题描述 投票:0回答:1

我想创建一个代码,作为我未来所有代码的输入检查的基础,但当我要求用户重新输入他的输入时,我很挣扎,我不明白为什么我的标准: if (is_var_an_int == false) 语句中的 :cin >> var 不起作用,它只是被忽略,我无法更改它,然后如果使用 while 循环,它只会无限打印。所以我想了解为什么我的 std::cin 语句不起作用。这是我写的代码:

#include <iostream>

int main()
{
    std::cout << "Demo on !" << std::endl;

    int var{};

    bool is_var_an_int{};

    std::cout << "Var: "; std::cin >> var;

    if (std::cin.good())
    {
        is_var_an_int = true;
        std::cin.clear();
    }
    
    else
    {
        is_var_an_int = false;
        std::cin.clear();
    }

    if (is_var_an_int == false)
    {
        std::cout << "in the loop" << "\n";

        std::cin.clear();

        std::cout << "New var: "; std::cin >> var;

        if (std::cin.good())
        {
            is_var_an_int = true;
            std::cin.clear();
        }
    
        else
        {
            is_var_an_int = false;
            std::cin.clear();
        }
    }
    
    std::cout << is_var_an_int;
}

知道我才刚刚开始学习C++。

我试图看看是否有一种方法可以检测用户输入是否与等待的类型不同,这是用 std::cin.good() 解决的。但是现在,在用户输入“hqjdhbqj”这样的输入之后,我的代码要告诉用户,他给出的输入与类型不对应,他(用户)需要重试。

c++ validation
1个回答
0
投票

您需要的代码比您想象的要少得多。
像这样的事情应该做:

std::cout << "Enter an integer: "; 
while (!(std::cin >> var)) // This is true when reading fails.
{
    std::cin.clear(); // Clear error flag.
    std::cin.ignore(some_big_number, '\n');   // Discard rest of line.
    std::cout << "Please enter an integer: ";
}
© www.soinside.com 2019 - 2024. All rights reserved.