J'ai un code comme à 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: p> que je ne comprends pas . Ce que je fais mal, Qu'est-ce que cet avertissement signifie et comment puis-je le corriger? p> p> config_atual code> est un tableau de caractères contenant la présente configuration du tableau de lecture. P>
4 Réponses :
== code> 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 code> ne fonctionneront pas comme prévu. Réécrivez la condition dans une forme
(A == b && b == c) code> à la place (et pensez les parenthèses). P>
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 code>, 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 code> 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. && code> se lie plus étroitement que
|| code> (juste comme
* code> lie plus étroitement que
+ code> dans des expressions arithmétiques), donc
(a && b) || (C && d) code> n'est pas différent sémantiquement (bien qu'il soit plus bruyant) que
A && B || C && D CODE>.
Vous pouvez le faire comme ceci
L'expression occasionnellement, le chaînage de est un tel sens. p> config_atuel [6] == config_atuel [7] == config_atuel [8] code> est groupé em> comme
(config_atuel [6] == config_atual [ 7]) == config_atual [8] code>. La pièce entre parenthèses est soit
true code> ou
false code> qui est implicitement convertie en un type
int code> (ou le type de
config_atual [8] code> est-ce plus large qu'un
int code>) avant une deuxième comparaison; I.e.
config_atual [8] == {1, 0} code>, où j'ai utilisé ce qui est dans
{} code> pour indiquer les possibilités. Que probablement em> finit comme
faux code>. P>
== code> 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; p>
config_atuel [6] == config_atuel [7] && config_atuel [7] == config_atuel [8] code> p> p>
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; }
== code> ne peut pas être enchaîné ensemble.
@Quimby Sûr. :)
Pour résoudre, ajoutez les parenthèses comme suggéré. 😉
Dupliquer possible a>
@Trebledj OK, oui techniquement correct. Mais pas d'une manière utile (à part les bools), je dirais donc que c'est la même chose que le chaînage de
Cout << x << y << z; code> ou
A + B + C + d code>.