我有类似的代码
if (config_atual[6]==config_atual[7]==config_atual[8] ||
config_atual[1]==config_atual[4]==config_atual[7] ||
config_atual[2]==config_atual[4]==config_atual[6])
{
if (config_atual[7]=='X')
cout << "O Jogador ganhou!" << endl;
else if (config_atual[7]=='O')
cout << "O Computador ganhou!" << endl;
}
关于井字游戏,每当我尝试编译此代码行时,它都会验证三个获胜条件(假设第一行的索引为0,1,2,第二行的索引为3,4,5,最后的6,7,8)我收到此警告:
suggest parentheses around comparison in operand of '==' [-Wparentheses]
我不了解。我做错了,config_atual
是一个char数组,其中包含游戏板的当前配置。
此警告是什么意思,我该如何纠正?
答案 0 :(得分:3)
==
运算符不能那样工作。它仅允许两个操作数,这意味着a == b == c
之类的构造将无法正常工作。改写为(a == b && b == c)
形式的条件(并注意括号)。
答案 1 :(得分:3)
表达式config_atual[6]==config_atual[7]==config_atual[8]
被分组为(config_atual[6]==config_atual[7])==config_atual[8]
。括号中的部分是true
或false
,它隐式转换为int
类型(或者config_atual[8]
的类型比int
宽)在第二次比较之前;即config_atual[8]=={1, 0}
,在这里我用{}
中的内容来表示可能性。该可能最终以false
结尾。
有时,以这种方式链接==
是有用的。但是在您的情况下不是,并且您需要以其他方式编写表达式;
config_atual[6]==config_atual[7] && config_atual[7]==config_atual[8]
就是这样一种方式。
答案 2 :(得分:1)
您可以这样做
if ((config_atual[6]==config_atual[7] && config_atual[7]==config_atual[8]) ||
(config_atual[1]==config_atual[4] && config_atual[4]==config_atual[7]) ||
(config_atual[2]==config_atual[4] && config_atual[4]==config_atual[6]))
答案 3 :(得分:0)
if (((config_atual[6]==config_atual[7])==config_atual[8]) ||
((config_atual[1]==config_atual[4])==config_atual[7]) ||
((config_atual[2]==config_atual[4])==config_atual[6]))
{
if (config_atual[7]=='X')
cout << "O Jogador ganhou!" << endl;
else if (config_atual[7]=='O')
cout << "O Computador ganhou!" << endl;
}