[C] Problème de boucle???
Fermé
Maaag
-
18 janv. 2008 à 11:19
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 18 janv. 2008 à 15:31
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 18 janv. 2008 à 15:31
15 réponses
SebManfred
Messages postés
484
Date d'inscription
mardi 28 août 2007
Statut
Membre
Dernière intervention
20 mai 2011
128
18 janv. 2008 à 11:24
18 janv. 2008 à 11:24
tu peux nous montrer ton switch et les retours de tes fonctions (types et valeurs)?
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();
SebManfred
Messages postés
484
Date d'inscription
mardi 28 août 2007
Statut
Membre
Dernière intervention
20 mai 2011
128
18 janv. 2008 à 11:30
18 janv. 2008 à 11:30
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....
SebManfred
Messages postés
484
Date d'inscription
mardi 28 août 2007
Statut
Membre
Dernière intervention
20 mai 2011
128
18 janv. 2008 à 11:46
18 janv. 2008 à 11:46
après ton getchar, fais un printf("%c",reponse);, pour voir ce qu'il y a dans ta réponse...
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 :(
SebManfred
Messages postés
484
Date d'inscription
mardi 28 août 2007
Statut
Membre
Dernière intervention
20 mai 2011
128
18 janv. 2008 à 12:49
18 janv. 2008 à 12:49
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...
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
18 janv. 2008 à 13:15
18 janv. 2008 à 13:15
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
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
18 janv. 2008 à 13:18
18 janv. 2008 à 13:18
j'arrive trop tard ;)
SebManfred
Messages postés
484
Date d'inscription
mardi 28 août 2007
Statut
Membre
Dernière intervention
20 mai 2011
128
18 janv. 2008 à 13:27
18 janv. 2008 à 13:27
sinon, tu peux faire un scanf("%c",&reponse); à la place de ton getchar();
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
18 janv. 2008 à 13:32
18 janv. 2008 à 13:32
ça va rien changer...il va toujours lui manquer un getchar() pour recuperer '\n'
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 ...
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
18 janv. 2008 à 13:44
18 janv. 2008 à 13:44
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
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
18 janv. 2008 à 15:31
18 janv. 2008 à 15:31
ben oui c'est normal il faut qu'un seul...
donc tu mets soit le fgetc(stdin) ou le getchar()
a toi de choisir ;)
donc tu mets soit le fgetc(stdin) ou le getchar()
a toi de choisir ;)