[C] Problème de boucle???
Maaag
-
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un petit soucis avec mon programme.
Voila j'ai un menu de choix dans mon programme avec une fonction différente pour chaque choix. Et le programme ré-affiche le menu de choix après l'avoir éxécuté.
Pour cela j'ai donc fait un do...while sur la réponse entrer (tant que l'utilisateur n'a pas choisit de quitter il réaffiche le menu)
Et le problème est le suivant, après avoir exécuté la fonction il me réaffiche bien mon menu mais en prenant déjà en compte une réponse, celle du défaut du switch (le mauvais choix) et me remet le menu après ou il me laisse le choix d'entrer quelque chose..
Je sais pas si j'ai été très clair...
Mais si vous avez des idées d'ou ca peut venir? De la boucle du menu? de la fonction?
Merci :(
J'ai un petit soucis avec mon programme.
Voila j'ai un menu de choix dans mon programme avec une fonction différente pour chaque choix. Et le programme ré-affiche le menu de choix après l'avoir éxécuté.
Pour cela j'ai donc fait un do...while sur la réponse entrer (tant que l'utilisateur n'a pas choisit de quitter il réaffiche le menu)
Et le problème est le suivant, après avoir exécuté la fonction il me réaffiche bien mon menu mais en prenant déjà en compte une réponse, celle du défaut du switch (le mauvais choix) et me remet le menu après ou il me laisse le choix d'entrer quelque chose..
Je sais pas si j'ai été très clair...
Mais si vous avez des idées d'ou ca peut venir? De la boucle du menu? de la fonction?
Merci :(
A voir également:
- [C] Problème de boucle???
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Boucle excel sans macro - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
15 réponses
pas de problème,
Voila le switch, dans le Do..While :
char reponse;
do {
printf("***************************************************\n");
printf("* Bienvenue dans le menu de gestion d'individus : *\n");
printf("***************************************************\n\n ");
printf(" N - Naissance\n D - Deces\n M - Mariage\n S - Separation\n A - Affichage\n Q - Quitter\n\n");
printf("Veuillez entrer votre choix : ");
reponse=getchar();
printf("\n\n");
switch (reponse) {
case 'A' :
affichage();
break;
default :
printf("Mauvais choix !!\n\n\n");
break;
}
}
while (reponse != 'Q');
Pour l'instant il n'y a que la fonction afficher, parce que j'avais déjà fait les autres mais comme je voyais pas d'ou venait le bug j'ai tout repris petit a petit, et ca bug déjà à la première fonction :(
Affichage et donc du type :
void affichage();
Voila le switch, dans le Do..While :
char reponse;
do {
printf("***************************************************\n");
printf("* Bienvenue dans le menu de gestion d'individus : *\n");
printf("***************************************************\n\n ");
printf(" N - Naissance\n D - Deces\n M - Mariage\n S - Separation\n A - Affichage\n Q - Quitter\n\n");
printf("Veuillez entrer votre choix : ");
reponse=getchar();
printf("\n\n");
switch (reponse) {
case 'A' :
affichage();
break;
default :
printf("Mauvais choix !!\n\n\n");
break;
}
}
while (reponse != 'Q');
Pour l'instant il n'y a que la fonction afficher, parce que j'avais déjà fait les autres mais comme je voyais pas d'ou venait le bug j'ai tout repris petit a petit, et ca bug déjà à la première fonction :(
Affichage et donc du type :
void affichage();
ton switch prend des entiers en paramètres, pas des caractères...
si tu veux traiter des caractères, il faut que tu travailles avec des "if"
si tu veux traiter des caractères, il faut que tu travailles avec des "if"
Euh tu es sur de cela? parce que mon switch il fonctionne c'est juste qu'à la fin de lafonction il remet le menu "deux fois"..
De plus c'est notre prof qui nous a dit d'utiliser un case, et chez d'autres etudiants pas de problème.. donc je comprend pas trop :s
De plus c'est notre prof qui nous a dit d'utiliser un case, et chez d'autres etudiants pas de problème.. donc je comprend pas trop :s
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je confirme, après vérification dans mon cours, le switch fonctionne sur des caractères, c'est sur les CHAINES de caractères que cela ne fonctionne pas....
J'ai testé le case avec un printf tout simple a la place de la fonction, ca fait la meme chose...
Le problème vient donc forcément du do/while ou du switch mais je vois VRAIMENT pas ou ... :(
Si quelqu'un trouve merci :(
Le problème vient donc forcément du do/while ou du switch mais je vois VRAIMENT pas ou ... :(
Si quelqu'un trouve merci :(
tu entre bien des majuscules?
sinon, il faudrait que tu fasse
case 'A':
case 'a':
affichage();
break;
etc...
sinon, il faudrait que tu fasse
case 'A':
case 'a':
affichage();
break;
etc...
le probleme c'est que apres avoir fait ton choix tu appuies sur entree donc le caractere '\n' est rentré dans la variable reponse donc ton switch prends le choix par default...
la solution tu rajoutes:
apres
la solution tu rajoutes:
getchar();
apres
reponse=getchar();
Oui j'entre bien des majuscules..
Et j'ai trouvé une solution : mettre fgetc(stdin) juste après mon getchar().. c'est pas optimal mais ca marche.
Merci pour ton aide en tout cas
Et j'ai trouvé une solution : mettre fgetc(stdin) juste après mon getchar().. c'est pas optimal mais ca marche.
Merci pour ton aide en tout cas
Bon en fait ma solution n'est qu'à moitié juste...
Parce que si je rentre un mauvaix choix il me le dit et me réaffiche un menu avec un mauvais choix déjà entrer et après un menu "vierge"
Par contre si je combine ta soluce mype avec la mienne ca marche a un détail près obligé d'appuyer sur entrer après avoir entrer le choix ...
Parce que si je rentre un mauvaix choix il me le dit et me réaffiche un menu avec un mauvais choix déjà entrer et après un menu "vierge"
Par contre si je combine ta soluce mype avec la mienne ca marche a un détail près obligé d'appuyer sur entrer après avoir entrer le choix ...
j'ai pas trop compris...
comme ça ça marche pas ?
comme ça ça marche pas ?
char reponse; do { printf("***************************************************\n"); printf("* Bienvenue dans le menu de gestion d'individus : *\n"); printf("***************************************************\n\n "); printf(" N - Naissance\n D - Deces\n M - Mariage\n S - Separation\n A - Affichage\n Q - Quitter\n\n"); printf("Veuillez entrer votre choix : "); reponse=getchar(); getchar(); printf("\n\n"); switch (reponse) { case 'A' : affichage(); break; default : printf("Mauvais choix !!\n\n\n"); break; } } while (reponse != 'Q'); return 0;}
Non comme ca:
char reponse;
do {
printf("***************************************************\n");
printf("* Bienvenue dans le menu de gestion d'individus : *\n");
printf("***************************************************\n\n ");
printf(" N - Naissance\n D - Deces\n M - Mariage\n S - Separation\n A - Affichage\n Q - Quitter\n\n");
printf("Veuillez entrer votre choix : ");
reponse=getchar();
getchar();
fgetc(stdin);
printf("\n\n");
switch (reponse) {
case 'A' :
affichage();
break;
default :
printf("Mauvais choix !!\n\n\n");
break;
}
}
while (reponse != 'Q'); return 0;}
Avec le fgetc(stdin) en plus après getchar();... seul hic devoir appuyer sur entré après
char reponse;
do {
printf("***************************************************\n");
printf("* Bienvenue dans le menu de gestion d'individus : *\n");
printf("***************************************************\n\n ");
printf(" N - Naissance\n D - Deces\n M - Mariage\n S - Separation\n A - Affichage\n Q - Quitter\n\n");
printf("Veuillez entrer votre choix : ");
reponse=getchar();
getchar();
fgetc(stdin);
printf("\n\n");
switch (reponse) {
case 'A' :
affichage();
break;
default :
printf("Mauvais choix !!\n\n\n");
break;
}
}
while (reponse != 'Q'); return 0;}
Avec le fgetc(stdin) en plus après getchar();... seul hic devoir appuyer sur entré après