Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2870 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème de boucle...?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de boucle...?

n°1673186
magg0t
Posté le 18-01-2008 à 11:22:18  profilanswer
 

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 :(

mood
Publicité
Posté le 18-01-2008 à 11:22:18  profilanswer
 

n°1673197
Elmoricq
Modérateur
Posté le 18-01-2008 à 11:29:13  profilanswer
 

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);

n°1673206
magg0t
Posté le 18-01-2008 à 11:37:09  profilanswer
 

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  :??:

n°1673239
Elmoricq
Modérateur
Posté le 18-01-2008 à 11:54:51  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème de boucle...?

 

Sujets relatifs
probleme de boucle[C] Problème de boucle While
[Résolu] Probleme boucle colorationProbleme boucle (debutant) Urgennttttttt
[Debutant] probleme boucleProblème avec boucle et affichage
probleme avec boucle forproblème boucle until
Problème boucle à droite![PHP] Problème de boucle et menu
Plus de sujets relatifs à : Problème de boucle...?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR