C++ 在while循环中调用布尔函数
我有一个bool函数,里面有if-else语句。第一个“if”返回“false”,而else返回“true”。我想在另一个函数中调用这个布尔函数,其中有一个while循环。我试了好几次,都成功了。然而,当我调用函数时,它总是返回“true”。我怎样才能解决这个问题C++ 在while循环中调用布尔函数,c++,visual-c++,C++,Visual C++,我有一个bool函数,里面有if-else语句。第一个“if”返回“false”,而else返回“true”。我想在另一个函数中调用这个布尔函数,其中有一个while循环。我试了好几次,都成功了。然而,当我调用函数时,它总是返回“true”。我怎样才能解决这个问题 bool secretCheck(string P1_name, string P2_name, char secret){ secret = 'R', 'G', 'B', 'P', 'Y', 'M'; if (se
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";
}
}
在函数secretCheck中,将值“R”指定给secret,完全覆盖它以前的内容。然后,返回错误的iff机密!='R’。因此,您永远不会返回false,因为secret永远是“R”。不清楚在该函数的第一行中您试图做什么,特别是因为该函数的含义不清楚,您甚至从未使用任何一个字符串参数。我建议确保您的功能实际执行了您希望它执行的任务。我不确定您想用这一行做什么:
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
这也是事实,因为比较字符和int将比较字符的ASCII值
要在变量中存储多个字符,它必须是std::string或std::vector类型:
为什么你有行秘密='R','G','B','P','Y','M';?你觉得它是干什么的?我觉得它储存了秘密可以带走的人物。不是吗?@YassineEzzaim没有。我猜如果你启用了警告,你会看到一些与该行相关的警告。@Aschepper我没有任何警告:/,那行错了吗?如何在该字符中存储字符列表?@YassineEzzaim您不能在字符中存储字符列表。您可以有一个字符列表,也可以有一个字符。一个变量不能同时具有多个类型逗号运算符的优先级低于赋值,因此实际上将secret设置为“R”。同样的问题。我如何将这些字符分配给变量类型的字符或字符串?@YassineEzzaim我很难理解你想问我什么。您想要一个字符列表还是一个字符?我想检查用户输入字母时,Secret是否只包含这些字母。@YassineEzzaim您在这里并不特别需要字符列表。您可以立即使用if secret!='R'&&…&&秘密我觉得像string::find这样的东西是另一种方式。
std::vector<char> secret_characters = {'R', 'G', 'B', 'P', 'Y', 'M'};
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;
}
}