Я не уверен, что вы пытаетесь сделать с этой строкой:
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;
}
}