Simple problème de comparateur

Résolu/Fermé
firstdied Messages postés 18 Date d'inscription mardi 28 février 2012 Statut Membre Dernière intervention 16 janvier 2013 - 7 déc. 2012 à 22:53
firstdied Messages postés 18 Date d'inscription mardi 28 février 2012 Statut Membre Dernière intervention 16 janvier 2013 - 9 déc. 2012 à 08:04
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 :-)
A voir également:

4 réponses

ReganDryke Messages postés 13 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 22 février 2013 6
8 déc. 2012 à 23:35
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')
1
ReganDryke Messages postés 13 Date d'inscription samedi 8 décembre 2012 Statut Membre Dernière intervention 22 février 2013 6
9 déc. 2012 à 00:39
Edit : J'ai enfin compris pourquoi il acceptait toujours et ce qu'il se passait exactement dans ton code.
lorsque tu écrivait
direction =!'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.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
Modifié par Heliotte le 7/12/2012 à 23:34
Bonsoir firstdied,
Je n'ai pas trop regardé, mais n'y a-t-il pas une erreur là :
direction=!'O'
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
7 déc. 2012 à 23:38
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 ?
0
firstdied Messages postés 18 Date d'inscription mardi 28 février 2012 Statut Membre Dernière intervention 16 janvier 2013
9 déc. 2012 à 08:04
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 :-)
0