Problème de boucle...?

Problème de boucle...? - C - Programmation

Marsh Posté le 18-01-2008 à 11:22:18    

Bonjour tout le monde,
 
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 do? de la fonction ?
 
je vous met deja la boucle du menu :
 

Code :
  1. char reponse;
  2.     do {
  3.   printf("***************************************************\n" );
  4.   printf("* Bienvenue dans le menu de gestion d'individus : *\n" );
  5.   printf("***************************************************\n\n " );
  6.   printf(" N - Naissance\n  D - Deces\n  M - Mariage\n  S - Separation\n  A - Affichage\n  Q - Quitter\n\n" );
  7.   printf("Veuillez entrer votre choix : " );
  8.   reponse=getchar();
  9.   printf("\n\n" );
  10.   switch (reponse) {
  11.         case 'A' :
  12.             affichage();
  13.             break;
  14.         default :
  15.             printf("Mauvais choix !!\n\n\n" );
  16.             break;
  17.         }
  18.     }
  19.     while (reponse != 'Q');


 
 
Merci pour votre aide :(

Reply

Marsh Posté le 18-01-2008 à 11:22:18   

Reply

Marsh Posté le 18-01-2008 à 11:29:13    

Vide le flux stdin avant d'en faire la lecture à stocker dans ta variable "reponse".
 
Par exemple :

Code :
  1. int c;
  2. while ((c = fgetc(stdin)) != '\n' && c != EOF);

Reply

Marsh Posté le 18-01-2008 à 11:37:09    

Elmoricq a écrit :

Vide le flux stdin avant d'en faire la lecture à stocker dans ta variable "reponse".
 
Par exemple :

Code :
  1. int c;
  2. while ((c = fgetc(stdin)) != '\n' && c != EOF);



 
 
Merci, mais étant débutante je comprends pas trop tout ca.. ou je le met déjà?
Et en plus n'y aurait-il pas plus simple, parce que mon prof va vraiment se demander d'ou je sors ca  :??:

Reply

Marsh Posté le 18-01-2008 à 11:54:51    

Lorsque tu tapes au clavier, tu alimentes le flux d'entrée standard : stdin.
C'est un buffer, c'est-à-dire que ça stocke tant que l'on ne lit pas dedans.
 
Si tu ne vides pas ce buffer avant ta ligne "reponse=getchar();", le programme n'attendra pas que l'utilisateur entre quoi que ce soit puisqu'il y a encore quelque chose à lire dans stdin.
 
Donc, il faut vider ce buffer avant de demander à l'utilisateur d'entrer son choix au menu. D'où le petit code que je t'ai mis, qui lit tous les caractères de stdin avant de rendre la main (tu peux remplacer "fgetc(stdin)" par "getchar()" si tu veux, ça fait la même chose).
Pour plus d'information : man fgetc (en ligne de commande sur unix, ou sur google si tu ne bosses pas sur un unix)


Message édité par Elmoricq le 18-01-2008 à 11:57:25
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed