如何简单地在C++中进行输入验证
How to do input validation simply in C++?
如果输入既不是字符c
也不是h
,我想给出错误消息,但我无法让它工作!我查找了一些其他答案,但它们大多使用我根本不理解的throw
/catch
方法。我刚开始编程,错误处理在第 20 或 21 章中。用最简单的方法帮助我。
这是我尝试过的:
cout << "Enter 'c'(even) or 'h'(odd): ";
cin >> your_guess;
if((your_guess != ('c' || 'h')) == false) {
cout << "Wrong Input. Game is restarting... " << endl;
// restart the game ...
}
但它总是说Wrong Input. ...
.
(your_guess != ('c' || 'h')) == false
是错误的。 ('c' || 'h')
只是简单地评估为 true
.内置operator||
采用两个bool
参数:
bool operator||(bool, bool)
而且由于'c'
和'h'
都不是NUL
字符,因此它们转换为true
.
true
或true
true
。该语言不会创建一些神奇的实体,您可以使用这些实体进行operator==
/operator!=
char
以查看该角色是否在您列出的角色中。
然后,稍后将布尔值和字符提升为int
以进行不等式检查。我猜your_guess
不会等于1
.我的意思不是'1'
(ASCII 49
),而是1
(ASCII 1
)。所以你已经有效地写了if(true)
...
你想说的是:
(your_guess != 'c' || your_guess != 'h') == false
或
!(your_guess != 'c' || your_guess != 'h')
或
your_guess == 'c' && your_guess == 'h' // your_guess equal 'c' and 'h' at once?
现在你发现逻辑有问题。
条件的正确代码是以下代码之一:
your_guess != 'c' && your_guess != 'h'
!(your_guess == 'c' || your_guess == 'h')
这只是德摩根定律。
<小时 />如何在C++中简单地进行输入验证?
如果以上对你来说不简单,你可以使用switch
(因为无论如何你都可能使用它)。但是每个case
都根据编译时常量测试变量。
如果您要检查的字母存储在变量中,我建议这样做:
std::string valid_characters = "ch"; // this will be our "magical entity"
if(valid_characters.find(your_guess) == std::string::npos)
{
// you have entered a character that is not 'c' nor 'h'
}
你可以
试试
switch(your_guess){
case 'c' :
case 'h' :
// do something
break;
default :
cout<<"invalid Input"<<endl;
break;
}
如果你在 c++ 中做一个错误消息,除了改变之外,你可能还需要考虑使用 cerr 而不是 cout:
your_guess!=('c'||'h'))==false
到其他答案中列出的正确形式之一
相关文章:
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- LibGit2 SSH身份验证失败
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- constexpr上下文中std::initializer_list的验证
- 正在验证c++中用户的整数输入
- 加密++验证大文件签名
- C++卡验证问题
- 验证指针链
- 此代码验证公式是什么意思?
- cin 的十进制输入验证?
- 简单的 HTML 验证器
- 密码长度验证 (c++)
- 输入验证以筛选出字符、字符串和一系列整数
- 如何使用 CredUIPromptForWindowsCredentials验证凭据
- 指针验证的最佳实践?
- RSA_PKCS1签名验证
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 使用 C++ 验证 NMEA 句子
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?