过滤掉无效的用户输入

Fak*_*ken 2 c++ validation stl

我正在尝试使用以下代码块在小型 C++ 程序中过滤掉无效的用户输入:

    int selection = -1;
    while (!(selection >= 1 && selection <=4))
    {   
        cin >> selection;

        if (!(selection >= 1 && selection <=4))
        {
            cout << "invalid selection!" << endl;
            cout << "selection: ";
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我输入任何在我想要过滤的范围内或外的数值时,它似乎工作正常。但是,当我输入无效值(例如大于最大可存储 int 或字符的值)时,会发生奇怪的事情。代码循环并跳过“cin”命令。

我该如何解决?

谢谢

Ste*_*end 5

在读入新的输入尝试之前,您需要使用检测不可转换的输入fail(),然后忽略其余的坏数据并cin使用重置错误标志clear()

int selection = -1;
while (!(selection >= 1 && selection <=4))
{   
    cin >> selection;

    if (cin.fail() || !(selection >= 1 && selection <=4))
    {
        cout << "invalid selection!" << endl;
        cout << "selection: ";

        cin.clear();

        cin.ignore(std::numeric_limits<int>::max(), '\n');
    }
}
Run Code Online (Sandbox Code Playgroud)