Problème avec la boucle While

Résolu/Fermé
nazgulou Messages postés 6 Date d'inscription dimanche 24 août 2014 Statut Membre Dernière intervention 24 août 2014 - 24 août 2014 à 17:13
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 août 2014 à 21:52
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
Modifié par fiddy le 24/08/2014 à 19:21
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 dimanche 24 août 2014 Statut Membre Dernière intervention 24 août 2014
24 août 2014 à 20:11
Merci de m'avoir expliquer tout ça !
0
mr_demonicon Messages postés 828 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 9 avril 2016 126
24 août 2014 à 17:29
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 dimanche 24 août 2014 Statut Membre Dernière intervention 24 août 2014
24 août 2014 à 17:31
Merci beaucoup ! J'ai compris mon erreur du coup ^^
0
mr_demonicon Messages postés 828 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 9 avril 2016 126
24 août 2014 à 19:08
a ton service
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 août 2014 à 19:15
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 dimanche 20 juillet 2014 Statut Membre Dernière intervention 9 avril 2016 126
24 août 2014 à 21:04
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 août 2014 à 21:13
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