Problème avec la boucle While

Résolu
Salut j'ai un problème avec une boucle while dans un de mes programmes , je suis débutant .

Le problème est que la boucle recommence même lorsque la condition est fausse.

Voilà le programme en question si vous pouvez m'aider , s'il vous plait.
int main()
{
     char reponse[10], Chat[] = "chat";

     while(reponse != Chat)
     {

      printf("Dit : chat\n");

     scanf("%s", reponse);

     if(strcmp(reponse,Chat) == 0)
     {
         printf("Bien !\n");
     }

     else
     {
         printf("Repete !\n");
     }
     }


    return 0;
}

2 réponses

  1. Contributeur
    Bonjour,

    Ton erreur vient de là : while(reponse != Chat)
    Tu compares les adresses des tableaux. Comme il s'agit d'adresses différentes, il y a toujours inégalité. Donc tu ne sortiras jamais de cette boucle.

    Pour comparer le contenu du tableau, il faut faire comme tu as fait dans ton if avec strcmp().
    while (strcmp(reponse,Chat) != 0)


    scanf("%s", reponse);
    Je te conseille plutôt de mettre : scanf("%9s", reponse);
    Sinon, ton programme risque de planter si tu rentres une chaîne trop grande.

    char reponse[10]
    Tu n'as pas initialisé reponse. Cela risque donc de poser problème pour la première passe du while(). Il faut donc faire :
    char reponse[10]=""; 


    Attention également à l'indentation qui n'est pas régulière ;-).

    Cdlt,

    Google is your friend
    1. Merci de m'avoir expliquer tout ça !
  2. rajoute return 0; dans ta boucle if comme ca
    int main()
    {
         char reponse[10], Chat[] = "chat";
    
         while(reponse != Chat)
         {
    
          printf("Dit : chat\n");
    
         scanf("%s", reponse);
    
         if(strcmp(reponse,Chat) == 0)
         {
             printf("Bien !\n");
             return 0;
         }
    
         else
         {
             printf("Repete !\n");
         }
         }
    
    
        return 0;
    }
    
    1. Merci beaucoup ! J'ai compris mon erreur du coup ^^
    2. a ton service
    3. Contributeur
      Très mauvaise solution...
      Cela l'empêchera d'exécuter les éventuelles instructions qu'ils rajouteraient après la boucle while.
    4. je sais on peut simplement mettre sur pause le programme mais la dans son cas la solution est adapté
    5. Contributeur
      Non. Même avec "Pause", tu ne sortiras pas de la boucle while...
      Le plus propre est de mettre la bonne condition de le while ou alors de faire un break;
      Cdlt,