0
votes

Comment corriger des parenthèses suggérées autour de la comparaison dans l'opérande de '=='

J'ai un code comme xxx

à propos d'un jeu TIC-TAC-toe, et chaque fois que j'essaie de compiler cette ligne de code, qui vérifie trois des conditions de victoire (en supposant des index 0 , 1,2 pour la première ligne, 3,4,5 pour les deuxième et 6,7,8 pour la dernière fois), j'ai reçu cet avertissement: xxx

que je ne comprends pas . Ce que je fais mal, config_atual est un tableau de caractères contenant la présente configuration du tableau de lecture.

Qu'est-ce que cet avertissement signifie et comment puis-je le corriger?


4 Réponses :


3
votes

== Opérateur en C ++ ne fonctionne pas comme ça. Il n'autorise que deux opérandes, ce qui signifie des constructions telles que A == b == C ne fonctionneront pas comme prévu. Réécrivez la condition dans une forme (A == b && b == c) à la place (et pensez les parenthèses).


4 commentaires

Pour développer la solution de R5HA et suivre l'utilisateur463035818 Le codage des conseils dans une langue est une langue. Donc, si vous essayez de déterminer si vous avez Tic TAC Toe One, on pourrait se dire à eux-mêmes »si ce carré est égal (==) sur ce carré et (&&) que Square est égal (==) sur ce carré puis TIC-TAC -toe. Peut-être que vous ne vous aiderez peut-être pas à regarder de cette façon, mais certainement m'aide. Je décompose la phrase dans une langue régulière puis t-à-la pour l'appliquer à la langue de codage


Dans la déclaration a == b == C , A == B renvoie une valeur booléenne, qui est ensuite comparée à c. Si C est un type non booléen, il existe une conversion implicite entre un bool et ce type, il sera converti et ensuite comparé à c. Dans ce cas, a == b se transforme en 1 ou a 0, car c est un char, qui est traité comme un entier. C'est le cas sur x86, au moins; Je pense que cela pourrait être un comportement indéfini.


@DavidDalcino: En fait, vous êtes correct sur le groupement et je n'étais pas. Dommage que vous n'ayez pas écrit cela dans la section Réponses!


Re: "Mind Les parenthèses" - les parenthèses ne sont pas nécessaires. && se lie plus étroitement que || (juste comme * lie plus étroitement que + dans des expressions arithmétiques), donc (a && b) || (C && d) n'est pas différent sémantiquement (bien qu'il soit plus bruyant) que A && B || C && D .



1
votes

Vous pouvez le faire comme ceci xxx


0 commentaires

3
votes

L'expression config_atuel [6] == config_atuel [7] == config_atuel [8] est groupé comme (config_atuel [6] == config_atual [ 7]) == config_atual [8] . La pièce entre parenthèses est soit true ou false qui est implicitement convertie en un type int (ou le type de config_atual [8] est-ce plus large qu'un int ) avant une deuxième comparaison; I.e. config_atual [8] == {1, 0} , où j'ai utilisé ce qui est dans {} pour indiquer les possibilités. Que probablement finit comme faux .

occasionnellement, le chaînage de == de cette manière est utile. Mais dans votre cas, ce n'est pas le cas, et vous devez écrire l'expression d'une manière différente;

config_atuel [6] == config_atuel [7] && config_atuel [7] == config_atuel [8]

est un tel sens.


0 commentaires

0
votes
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 commentaires