Problème avec la boucle While

Résolu
nazgulou Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
2
nazgulou Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Merci de m'avoir expliquer tout ça !
0
mr_demonicon Messages postés 828 Date d'inscription   Statut Membre Dernière intervention   126
 
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;
}
-2
nazgulou Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup ! J'ai compris mon erreur du coup ^^
0
mr_demonicon Messages postés 828 Date d'inscription   Statut Membre Dernière intervention   126
 
a ton service
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Très mauvaise solution...
Cela l'empêchera d'exécuter les éventuelles instructions qu'ils rajouteraient après la boucle while.
0
mr_demonicon Messages postés 828 Date d'inscription   Statut Membre Dernière intervention   126
 
je sais on peut simplement mettre sur pause le programme mais la dans son cas la solution est adapté
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0