Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle while

Sujet résolu
    21 mai 2018 à 16:17:23

    Bonjour à tous,

    Pouvez vous m'expliquer pourquoi je ne sors jamais de cette boucle même si je rentre soit z soit s soit q soit d ?

    int main()
    {
        char direction;
        printf("Dans quelle direction veux tu aller ? z,q,s,d \n\n");
        scanf("%s",&direction);
        while(direction!='z' || direction!='q' || direction!='s' || direction!='d')  /// Boucle de test pour que les directions
        {                                                                            /// soient bonnes
            printf("Tu t'es trompe, dans quelle direction veux tu aller ? z,q,s,d \n\n");
            fflush(stdin);
            scanf("%s",&direction);
        }
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2018 à 16:21:31

      Le souci peut venir de la ligne 10 : tu utilises %s au lieu de %c.

      De plus, il me semble que la condition du while est toujours vérifiée. Par exemple si on tape 's', la lettre n'est certes plus différente de 's', mais elle reste différente de 'z' (notamment), donc la condition reste vraie.

      -
      Edité par robun 21 mai 2018 à 16:23:04

      • Partager sur Facebook
      • Partager sur Twitter
        21 mai 2018 à 16:42:13

        Le format %s de scanf() implique un ajout automatique d'un '\0', qui sera placé sur un octet qui ne t'appartient pas (comportmeent indéfini, crash potentiel ...).

        fflush() sur stdin ça n'existe pas, fflush() ne marche que sur des flux de sortie : comportement indéfini, crash potentiel ...

        Ta boucle recommence si : direction est différent de 'z' OU BIEN différent de 'q' OU BIEN différent de ... etc. Donc si tu entres 'z' ou 'q', dans les deux cas la boucle va recommencer :)

        • Partager sur Facebook
        • Partager sur Twitter

        Boucle while

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown