Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
过滤出无效的用户输入 我试图用下面的代码块过滤一个小C++程序中的无效用户输入: int selection = -1; while (!(selection >= 1 && selection <=4)) { cin >> selection; if (!(selection >= 1 && selection <=4)) { cout << "invalid selection!" << endl; cout << "selection: "; } } int-selection=-1; 而(!(选择>=1&&selection>selection; 例如,当您输入字母时,如果(!(选择>=1&&selection_C++_Stl_Validation - Fatal编程技术网 =1&&selection>selection; 例如,当您输入字母时,如果(!(选择>=1&&selection,c++,stl,validation,C++,Stl,Validation" /> =1&&selection>selection; 例如,当您输入字母时,如果(!(选择>=1&&selection,c++,stl,validation,C++,Stl,Validation" />

过滤出无效的用户输入 我试图用下面的代码块过滤一个小C++程序中的无效用户输入: int selection = -1; while (!(selection >= 1 && selection <=4)) { cin >> selection; if (!(selection >= 1 && selection <=4)) { cout << "invalid selection!" << endl; cout << "selection: "; } } int-selection=-1; 而(!(选择>=1&&selection>selection; 例如,当您输入字母时,如果(!(选择>=1&&selection

过滤出无效的用户输入 我试图用下面的代码块过滤一个小C++程序中的无效用户输入: int selection = -1; while (!(selection >= 1 && selection <=4)) { cin >> selection; if (!(selection >= 1 && selection <=4)) { cout << "invalid selection!" << endl; cout << "selection: "; } } int-selection=-1; 而(!(选择>=1&&selection>selection; 例如,当您输入字母时,如果(!(选择>=1&&selection,c++,stl,validation,C++,Stl,Validation,,它会将cin置于错误状态并保留这些字符。您需要忽略它们(cin.ignore(1024,\n'))因此,它知道如何进入下一行输入。您应该将cin读入一个std::字符串,然后从那里开始验证。首先,请检查该值是否为数字。以下是解决问题的两条建议: 将错误处理添加到cin 读取为字符串并进行解析 常见的解决方案是字符串和解析,但我将两者都呈现给您选择 将错误处理添加到cin 当流提取函数接收到不适合数字的字符时,它会设置一个fail位。您需要检查流的状态(cin)是否失败。如果要继续,需要清除错误

,它会将
cin
置于错误状态并保留这些字符。您需要
忽略它们(
cin.ignore(1024,\n')
)因此,它知道如何进入下一行输入。

您应该将
cin
读入一个std::字符串,然后从那里开始验证。首先,请检查该值是否为数字。

以下是解决问题的两条建议:

  • 将错误处理添加到
    cin
  • 读取为字符串并进行解析
  • 常见的解决方案是字符串和解析,但我将两者都呈现给您选择

    将错误处理添加到
    cin
    当流提取函数接收到不适合数字的字符时,它会设置一个
    fail
    位。您需要检查流的状态(
    cin
    )是否失败。如果要继续,需要清除错误状态

    可以使用
    fail
    方法检查状态:
    cin.fail()
    。要清除状态,请使用:
    cin.clear()

    读取为字符串并进行解析 另一种方法是将输入作为字符串读取,然后为数据解析字符串。
    string
    容器有一些有用的解析方法

    使用
    getline
    读取
    cin
    中的
    字符串
    变量


    同样,您必须编写代码来检查错误并进行处理。

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

    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');
        }
    }
    
    int-selection=-1;
    而(!(选择>=1&&selection>selection;
    
    如果(cin.fail()| |!(selection>=1&&selection您需要检查
    cin
    的条件,如果是任何错误状态,您应该清除错误标志并
    忽略()


    注意:您可能需要将
    cin.ignore();
    放在
    getline()
    调用之后-这取决于您是否正在读取所有未格式化的输入。

    我应该如何使用此ignore?cin.ignore(1024)是什么意思?特别是1024部分。这告诉我们忽略接下来的1024个字符,这是错误的,因为接下来的1024个字符将被忽略。可能您想使用cin.ignore(1024,“\n”),它告诉我们忽略所有字符,直到找到换行符或忽略1024个字符为止。事实上,只忽略换行符。
    int main()
    {
        int selection = -1;
        while (!(selection >= 1 && selection <=4))
        {
            if (cin >> selection)
            {
                if (!(selection >= 1 && selection <=4))
                {
                    cout << "invalid selection!" << endl;
                    cout << "selection: ";
                }
            }
            else
            {
                cin.clear();
                cin.ignore();
            }
        }
    
        cout << selection << " selected\n";
    
        return 0;
    }
    
    int main()
    {
        int selection = -1;
        while (!(selection >= 1 && selection <=4))
        {
            string line;
            getline(cin, line);
    
            stringstream sstr(line);
            if (sstr >> selection)
            {
                if (!(selection >= 1 && selection <=4))
                {
                    cout << "invalid selection!" << endl;
                    cout << "selection: ";
                }
            }
            else
            {
                cout << "invalid input!" << endl;
                cout << "selection: ";
            }
        }
    
        cout << selection << " selected\n";
    
        return 0;
    }