我有一个bool函数,其中包含if else语句。第一个“ if”返回“ false”,其他则返回“ true”。我想在另一个带有while循环的函数中调用此布尔函数。我已经尝试了几次,并且使它起作用。但是,当我调用该函数时,它始终会返回“ true”。我该如何解决?
bool secretCheck(string P1_name, string P2_name, char secret){
secret = 'R', 'G', 'B', 'P', 'Y', 'M';
if (secret != 'R' && secret != 'G' && secret != 'B' && secret != 'P' && secret != 'Y' && secret != 'M' && secret > 4){
return false;
}
else {
return true;
}
}
void secretLoop(string P1_name, string P2_name, char secret){
while(!secretCheck(P1_name, P2_name, secret)){
cout << "Invalid secret!"<< endl;
cout << P1_name << ", please enter your secret: ";
cin >> secret;
}
if(secretCheck(P1_name, P2_name, secret)) {
cout << "Ok\n";
}
}
答案 0 :(得分:1)
我不确定您要使用此行做什么:
secret = 'R', 'G', 'B', 'P', 'Y', 'M';
一个字符可以保留一个和一个值。在这种情况下,您使用的是逗号运算符,该运算符将删除第一个值并返回第二个表达式。
在那一行,secret
总是 等于'R'
,因为它等同于说:
secret = 'R'; // now secret is equal to the character 'R'
然后,在您的if
语句中,您明白了:
secret != 'R' && /* ... */
由于secret
始终等于'R'
,因此这始终是错误的。
然后,有一个比较大的比较:
secret > 4
这也是事实,因为比较char
和int
将比较字符的ASCII值。
要在一个变量中存储多个字符,其类型必须为std::string
或std::vector
:
std::vector<char> secret_characters = {'R', 'G', 'B', 'P', 'Y', 'M'};
如果要检查secret
是否在secret_character
列表中,可以执行以下操作:
void is_secret(std::vector<char> const& secret_characters, char secret) {
auto found = std::find(
secret_characters.begin(), secret_characters.end(),
secret
);
return found != secret_characters.end();
}
bool secretCheck(string P1_name, string P2_name, char secret){
std::vector<char> secret_characters = {'R', 'G', 'B', 'P', 'Y', 'M'};
if (is_secret(secret_characters, secret)) {
return false;
} else {
return true;
}
}
答案 1 :(得分:0)
在函数secretCheck
中,您将值'R'
分配给secret
,完全覆盖了以前的值。然后,如果false
返回secret != 'R'
。因此,您将永远不会返回false
,因为secret
总是 为'R'
。目前尚不清楚您要在该函数的第一行中尝试执行的操作,尤其是由于该函数的含义尚不清楚(您甚至从未使用过任何一个字符串参数)。我建议确保您的功能确实在执行您想要的任务。