如何修复“==”操作数中比较周围的建议括号
How to fix suggest parentheses around comparison in operand of '=='
我有这样的代码
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
是一个包含游戏板当前配置的字符数组。
此警告是什么意思,我该如何更正它?
C++ 中的 ==
运算符不是那样工作的。它只允许两个操作数,这意味着像 a == b == c
这样的结构不会像你期望的那样工作。以 (a == b && b == c)
形式重写条件(注意括号)。
你可以这样做
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]))
表达式 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]
就是这样一种方式。
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;
}
我有这样的代码
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
是一个包含游戏板当前配置的字符数组。
此警告是什么意思,我该如何更正它?
==
运算符不是那样工作的。它只允许两个操作数,这意味着像 a == b == c
这样的结构不会像你期望的那样工作。以 (a == b && b == c)
形式重写条件(注意括号)。
你可以这样做
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]))
表达式 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]
就是这样一种方式。
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;
}