Simple problème de comparateur

Résolu
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 :-)

4 réponses

  1. 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 :-)
    1. 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. 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.
    2. 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 ?
      1. Bonsoir firstdied,
        Je n'ai pas trop regardé, mais n'y a-t-il pas une erreur là :
        direction=!'O'