在插入矢量 C++ 之前验证用户输入
Validating user input before inserting in a vector C++
我正在编写一个简单的程序作为练习,用户输入成绩(字符类型),系统验证输入,将用户输入与包含成绩的向量进行比较。
我在编写检查输入是否有效、将输入转换为大写,然后将输入插入向量的逻辑时遇到问题。如果用户没有输入有效字符并再次询问有效输入,我希望程序返回到循环的开头。现在程序验证输入并发送消息 "Please enter a valid grade",但无论输入是对还是错,都将其插入到向量中。这不是想要的结果。
刚开始学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 向量中。
我将不胜感激帮助或任何指导。
你想要循环,直到用户在高级别要求输入的 10 次中每次都输入一个有效值。因此,在 for 循环的每次迭代中,您都希望循环直到用户提供有效输入。只有这样你才能推入矢量。我建议您将它添加为一个函数,一旦找到有效输入就返回一个字符:
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();
}
}
我正在编写一个简单的程序作为练习,用户输入成绩(字符类型),系统验证输入,将用户输入与包含成绩的向量进行比较。
我在编写检查输入是否有效、将输入转换为大写,然后将输入插入向量的逻辑时遇到问题。如果用户没有输入有效字符并再次询问有效输入,我希望程序返回到循环的开头。现在程序验证输入并发送消息 "Please enter a valid grade",但无论输入是对还是错,都将其插入到向量中。这不是想要的结果。
刚开始学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 向量中。
我将不胜感激帮助或任何指导。
你想要循环,直到用户在高级别要求输入的 10 次中每次都输入一个有效值。因此,在 for 循环的每次迭代中,您都希望循环直到用户提供有效输入。只有这样你才能推入矢量。我建议您将它添加为一个函数,一旦找到有效输入就返回一个字符:
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();
}
}