如何提供一个函数,其中您将所有接受的字符作为字符串提供?
演示:
#include <iostream>
bool checkValid(char cChk, std::string_view allowed)
{
for (char c : allowed) if (cChk == c) return true;
return false;
}
int main()
{
char user_input2;
std::cin >> user_input2;
if (!checkValid(user_input2, "12345L")) {
std::cout << "Invalid input\n";
}
}
在 coliru 上的实时演示
顺便提一下,还有一个标准的 C 库函数(被采用于 C++ 标准),也可以使用:
std::strchr()
它返回找到的字符指针或 nullptr
,并且可以像上面示例中的 checkValid()
一样使用:
#include <cstring>
#include <iostream>
int main()
{
char user_input2;
std::cin >> user_input2;
if (!std::strchr("12345L", user_input2)) {
std::cout << "Invalid input\n";
}
}
在coliru上的实时演示
再三思考(关于OP可能的意图),我开始问为什么需要进行检查。假设有效的输入必须以某种方式被处理(我会使用switch
),那么无效的输入也可以被覆盖。
演示:
#include <iostream>
int main()
{
for (char user_input2; std::cin >> user_input2;) {
switch (user_input2) {
case '1': std::cout << "Change Name\n"; break;
case '2': std::cout << "Change Password\n"; break;
case '3': std::cout << "Change Address\n"; break;
case '4': std::cout << "Withraw\n"; break;
case '5': std::cout << "Deposit\n"; break;
case 'l': case 'L': std::cout << "Log out\n"; return 0;
default: std::cerr << "Invalid input!\n";
}
}
}
输入:
12AL
输出:
Change Name
Change Password
Invalid input!
Log out
Live Demo on coliru
||
运算符,条件将始终满足任何值user_input
可以取到。我认为你想使用 "and"&&
运算符。 - Patrickif
而不是while
。 - cigien