Simple problème de comparateur
Résolu
firstdied
Messages postés
20
Statut
Membre
-
firstdied Messages postés 20 Statut Membre -
firstdied Messages postés 20 Statut Membre -
Bonjour,
La question est simple: pourquoi la boucle ne continue-t-elle pas si j'entre une valeur non-désirée? De plus il se plante si j'entre 'S'.
le code c++:
do {cout<<"direction ? (N-O-S-W)"<<endl;cin>>direction;} while ((direction!='S')&&(direction=!'O')&&(direction!='W')&&(direction=!'N'));
Merci pour votre aide :-)
La question est simple: pourquoi la boucle ne continue-t-elle pas si j'entre une valeur non-désirée? De plus il se plante si j'entre 'S'.
le code c++:
do {cout<<"direction ? (N-O-S-W)"<<endl;cin>>direction;} while ((direction!='S')&&(direction=!'O')&&(direction!='W')&&(direction=!'N'));
Merci pour votre aide :-)
4 réponses
-
Erreur dans la condition :
L'operateur inegal s'ecrit != et non pas =!.
Je dirai que ton code ne plante pas a la compilation parce qu'il considere le =! comme une definition. Et qu'il trafique donc la valeur de ta variable sans que tu ne le veuille.
Bref la bonne condition est la suivante :(direction!='S')&&(direction!='O')&&(direction!='W')&&(direction!='N')
-
Edit : J'ai enfin compris pourquoi il acceptait toujours et ce qu'il se passait exactement dans ton code.
lorsque tu écrivaitdirection =!'N'
par exemple. il definissait, autrement dit il atribuait, la valeur !'N' a ta variable direction. l'operateur not considerant que tout ce sui n'est pas 0 est vrai il prend ton caractère 'N' comme un booleen vrai et renvoie son inverse donc 0. Ce 0 rend automatiquement ton ET faux ce qui sort de ta condition while directement. Et tout ca sans aucun avertissement puisque la syntaxe et la semantique sont correcte.
-
-
Bonsoir firstdied,
Je n'ai pas trop regardé, mais n'y a-t-il pas une erreur là :direction=!'O'
-
Encore moi. Je ne m'y connait pas trop en C++, mais je me pose la question :
((direction!='S')&&(direction=!'O')&&(direction!='W')&&(direction=!'N'));
Est-ce que la variable direction doit être égale à S ET O ET W ET N ?
C'est logique ? -
Oula, merci beaucoup. Ca ne m'etait meme pas venu a l'idee que ca pouvait etre du a un probleme de syntaxe vu que le code s'executait quand-meme... Mais ca aura au moins ete instructif :-)