在插入向量 C++ 之前验证用户输入
Posted
技术标签:
【中文标题】在插入向量 C++ 之前验证用户输入【英文标题】:Validating user input before inserting in a vector C++ 【发布时间】:2020-04-25 19:08:44 【问题描述】:我正在编写一个简单的程序作为练习,用户输入成绩(char 类型),系统验证输入,将用户输入与包含成绩的向量进行比较。
我在编写检查输入是否有效、将输入转换为大写然后将输入插入向量的逻辑时遇到问题。如果用户没有输入有效字符并再次询问有效输入,我希望程序回到循环的开头。现在程序验证输入并发送消息“请输入有效成绩”,但将输入插入向量中,无论它是对还是错。这不是我们想要的结果。
我刚开始学习 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 向量中。
感谢您的帮助或任何指导。
【问题讨论】:
使用其他循环结构,例如while
或do-while
,您可以在其中增加索引而不是自动增加索引。
...并使用temp
读取用户输入,仅在有效时插入。除此之外,您似乎拥有所有零件,只是顺序错误
如果您将arr
声明为const array<char, 5>
,则可以摆脱validateInput()
中vector<char>
的创建。 std::array
类有 begin()
和 end()
方法。
【参考方案1】:
您希望循环直到用户在高级别请求输入的 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();
【讨论】:
谢谢!这就像一个魅力。我已经两天试图解决这个简单的问题。以上是关于在插入向量 C++ 之前验证用户输入的主要内容,如果未能解决你的问题,请参考以下文章