[英](C++) How to validate user input for char variables?
我在比较用户输入的char变量时遇到问题。 我想检查他们是否回答一个问题。 如果他们没有输入Y或NI,则想给用户一条错误消息并开始循环。
下面是我创建的测试代码,将其作为要使用的程序的模板。 无论用户提供什么输入,程序都会循环执行。 另外,如果用户输入“ n”个字符,他们将收到“ n”个“ Failure!”。 消息以及初始cout消息。 如果他们输入Y,那么它也会发生,当然会显示“成功!”。
我在网上环顾四周,但尚未找到解决此问题的人。 为什么==对于等效性检查有效,而!=对于字符(对于字符串也无效)无效?
#include<iostream>
using namespace std;
int main()
{
char answer;
do{
cout <<"\nPlease type Y or N." << endl;
cin >> answer;
if ((answer == 'Y') || (answer == 'N'))
{
cout << "\nSuccess!" << endl;
}
else
{
cout << "\nFailure!" << endl;
}
}while ((answer != 'Y') || (answer != 'N'));
return 0;
}
问题在于以下几行:
while ((answer != 'Y') || (answer != 'N'));
这些条件之一始终为true,并且您正在应用逻辑OR,因此您永远也无法摆脱这种循环。 您需要进行如下更改:
while (answer != 'Y' && answer != 'N')
您误用了Boole的逻辑:对析取词的否定并不等于在保留析取词时对术语的否定。 相反,您需要取反这些术语并使用连词。
answer
将永远不是'Y'
或'N'
((answer != 'Y') || (answer != 'N'))
你可能会提到
((answer != 'Y') && (answer != 'N'))
((answer != 'Y') || (answer != 'N'));
一直循环直到用户输入不同于'Y'
或不同于'N'
,所以当输入'Y'
或'N'
时它就存在,因为它们当然是不同的。
您应该像下面的代码块那样循环:
do {
// code
} while ( answer == 'Y' && answer == 'N' );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.