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
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
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
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().
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 :
Attention également à l'indentation qui n'est pas régulière ;-).
Cdlt,
Google is your friend
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
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
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; }
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
24 août 2014 à 17:31
Merci beaucoup ! J'ai compris mon erreur du coup ^^
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
24 août 2014 à 19:08
a ton service
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
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.
Cela l'empêchera d'exécuter les éventuelles instructions qu'ils rajouteraient après la boucle while.
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
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é
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
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,
Le plus propre est de mettre la bonne condition de le while ou alors de faire un break;
Cdlt,
24 août 2014 à 20:11