在插入向量C ++之前验证用户输入

时间:2020-04-25 19:08:44

标签: c++ vector stdvector control-flow

我正在编写一个简单的程序作为练习,用户在其中输入成绩(字符类型),然后系统将输入内容与包含成绩的向量进行比较,以验证输入。

我在编写逻辑时遇到问题,该逻辑会检查输入是否有效,将输入转换为大写,然后将输入插入向量中。如果用户未输入有效字符并再次要求输入有效的字符,我希望程序返回到循环的开头。现在,程序将验证输入并发送消息“请输入有效等级”,但是无论输入是对还是错,都将输入插入向量中。那不是理想的结果。

我刚刚开始学习c ++,所以对不起代码。

此功能可获取用户输入,将其转换为大写并针对矢量进行验证。

void gradesInput() {
    char upperGrade;
    bool result = true;

    for (size_t i = 0; i < dGrades.size() && result == true; i++)
    {

            cout << "Please enter your student grades...\n";
            cin >> dGrades[i];
            upperGrade = toupper(dGrades[i]);
            result = validateInput(upperGrade);
            if (result == true){
                cout << "That's a valid grade.";
            }
            else {
                cout << "Please enter a valid grade.";
            }
    }
}

这是运行验证的功能:

bool validateInput(char uInput) {
    vector <char> grades(arr, arr + sizeof(arr) / sizeof(arr[0]));
    bool result = binary_search(grades.begin(), grades.end(), uInput);

    return result;
}

这是我正在使用的向量和数组声明:

std::vector <char> dGrades(10);
static const char arr[] = { 'A', 'B', 'C', 'D', 'F' };

在将输入与数组进行比较并转换为大写之后,我将用户输入插入dGrades向量。

我将感谢您的帮助或任何指导。

1 个答案:

答案 0 :(得分:0)

您要循环播放,直到用户要求输入10次高级别输入中的每一个有效值为止。因此,在for循环的每个迭代中,您都希望循环直到用户提供有效输入为止。只有这样,您才能进入向量。我建议您将其添加为找到有效输入后返回char的函数:

char getValidGrade() {
    char result;
    while (true) {
        cout << "Please enter your student grades...\n";
        cin >> result;
        result = toupper(result);
        if (validateInput(result)) {
            cout << "That's a valid grade.";
            return result;
        }
        else {
            cout << "Please enter a valid grade.";
        }
    }
}

像这样在gradesInput()中调用它:

void gradesInput() {
    for (auto &grade : dGrades) {
        grade = getValidGrade();
    }
}
相关问题