嘿我试图验证一个字符来限制它为男性或女性接受m或f。但即使按下m或f并且不断循环问题,它也不会通过while条件。
任何人都可以帮助我。 提前致谢。 这是我的代码:
char Validator :: getChar(string q)
{
char input;
do
{
cout << q.c_str() << endl;
cin >> input;
}
while(!isalpha(input) && "M"||"F"||"m"||"f");
return input;
}
答案 0 :(得分:2)
代码的"M"||"F"||"m"||"f"
部分没有按照您的想法执行。它的作用是检查那些字符串常量的 ADDRESSES 。由于它们都是非NULL,因此该表达式只返回true,因此您的条件基本上变为:while(!isalpha(input) && true)
与while(!isalpha(input))
相同。
请改为尝试:
char Validator::getChar(const string &q)
{
char input = 0;
do
{
cout << q << endl;
cin >> input;
}
while((input != 'M') && (input != 'F') && (input != 'm') && (input != 'f'));
return input;
}
答案 1 :(得分:1)
while
中的表达并不代表您的想法。首先,!
不适用于整个表达式,其次,“相等”不是隐式测试。你需要写出你的意思。
要测试相等性,请使用==
或!=
运算符。您必须在要测试的每个值上使用运算符;运营商不像普通英语那样“分配”一系列值。写下这样的条件:
while (input != 'M' && input != 'F' && input != 'm' && input != 'f');
您可以看到isalpha
来电不是必需的;如果input
不等于任何列出的值,那么它是否是按字母顺序排列的字符并不重要。
另一种写作方式是:
while (!(input == 'M' || input == 'F' || input == 'm' || input == 'f'));
请注意,我在内部术语周围有另一组括号,以便!
运算符适用于整个表达式,而不仅仅是第一个术语。
答案 2 :(得分:1)
仅针对终止条件的替代方法:
char Validator::getChar(const string &q)
{
const std::set<char> valid_chars { 'M', 'm', 'F', 'f' };
char input = 0;
do
{
cout << q << endl;
cin >> input;
}
while (!valid_chars.count(q));
return input;
}