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

  FORUM HardWare.fr
  Programmation
  C

  faire un menu implantable en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

faire un menu implantable en C

n°1029629
elessar53
con comme un drapeau
Posté le 30-03-2005 à 12:43:53  profilanswer
 

     Bonjour à tous. Je dois, dans un programme en C, réaliser un menu. J'ai choisi la solution du demander un nombre à l'utilisateur qui correspond à un choix du menu qu'on a affiché precedemment. Le problème c'est que la variable choix mise en tant que int fait planté le prog quand on fait scanf("%d",&choix); si on entre 0.5 par exemple.
      Pour m'en sortir j'ai mis choix en float et ensuite pour le test switch (pour tester le choix de l'utilisateur) j'ai mis switch((int)choix) pour forcer à passer en entier ( pke on peut pas faire un switch sur un float ). donc la sa marche si l'utilisateur entre 0.5, mais pas du tout si l'utilisateur entre la lettre a par exemple.  
 
      Est-ce qu'il existe une solution simple, compact pour avoir un menu qui ne plante pas si l'utilisateur se tape un delire dessus. Je demande pas le code tout fait, mais juste une piste ou une technique.
 
      merci
 
 

Code :
  1. void menu(void)
  2. {
  3. float choix;
  4. system("cls" );
  5. printf("Menu : entrez le code correspondant a l'action souhaitee :\n\n\t1 -\tparametrages\n\t2 -\treinitialiser\n\t3 -\tsimulation manuelle\n\t4 -\tsimulation automatique\n\t5 -\tquitter\n" );
  6. do
  7. {
  8.  scanf("%f",&choix);
  9. } while(!((choix==1)||(choix==2)||(choix==3)||(choix==4)||(choix==5)));
  10. switch((int)choix)
  11. {
  12. case 1:
  13.  break;
  14. case 2:
  15.  break;
  16. case 3:
  17.  break;
  18. case 4:
  19.  break;
  20. case 5:
  21.  quitter();
  22.  break;
  23. default:
  24.  break;
  25. }
  26. printf("\n%f",choix);
  27. printf("\n%d",(int)choix);
  28. }

mood
Publicité
Posté le 30-03-2005 à 12:43:53  profilanswer
 

n°1029856
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-03-2005 à 15:35:15  profilanswer
 

elessar53 a écrit :

Bonjour à tous. Je dois, dans un programme en C, réaliser un menu.<...> scanf("%d",&choix);
<...>  
      Est-ce qu'il existe une solution simple, compact pour avoir un menu qui ne plante pas si l'utilisateur se tape un delire dessus.


La solution robuste a été exposée 10.000 fois... Utiliser fgets()...
 
http://mapage.noos.fr/emdel/notes.htm#saisie


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1029891
gaar@
Posté le 30-03-2005 à 15:54:40  profilanswer
 

Bonjour, (dsl d'empiéter sur ton poste elessar53 mais bon j'allais pas recréer un sujet similaire )
J'ai pas de soucis pour toute les touches alphanumériques mais par contre pour les touches spécifiques je bloque :
 
Avec un simple getch() j'arrive bien à récuperer la saisie de ESC puis celle des touches alphanumériques mais pas les touche F1 F2 F3 ... Fx
 
Avec un bioskey(0) cela récupere la saisie des touches Fx mais plus toutes les autres...
 
 
et dans mon menu je propose les touches F1 F2 F3...  ESC et d'autre touches
 

Code :
  1. #define     KEY_ESC        0x001B
  2. #define     KEY_BS         0x0008
  3. #define     KEY_TAB        0x0009
  4. #define     KEY_CR         0x000D
  5. #define     KEY_SPACE      0x0020
  6. #define     KEY_F1         0x3B00
  7. #define     KEY_F2         0x3C00
  8. #define     KEY_F3         0x3D00


 
avec la méthode http://mapage.noos.fr/emdel/notes.htm#saisie peut on gérer les touches spécifiques ?
 
désolé si ma question est redondante  :jap:


Message édité par gaar@ le 30-03-2005 à 15:56:04
n°1029923
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-03-2005 à 16:12:39  profilanswer
 

gaar@ a écrit :

avec la méthode http://mapage.noos.fr/emdel/notes.htm#saisie peut on gérer les touches spécifiques ?


Non. Mon code est purement standard, Il ne voit que des caractères en provenance de stdin, pas des touches. Pour les touches, il faut des extensions qui dépendent du système et du compilateur.
 
La méthode classique sous MS-DOS/Borland C est


#include <conio.h>
 
int c = getch();
 
   if (c == 0)
   {  
      if (kbhit())
      {
         c = getch();
         /* c = touche etendue (F1-F10, fleches etc.) */
      }
   }
   else
   {
      /* c = touche alpha numerique */
   }


Evidemment, ce n'est pas portable...


Message édité par Emmanuel Delahaye le 30-03-2005 à 16:16:16

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1030158
elessar53
con comme un drapeau
Posté le 30-03-2005 à 18:17:25  profilanswer
 

Merci Emmanuel mais j'arrive franchement pas à utiliser fgets() pour recuperer une seule valeur. y'a 3 arguments à fournir à la fonction. qu'est ce qu'il faut ecrire pour mettre un nombre dans la variable choix sans que sa plante ??? fgets(choix) marche po :-(

n°1030280
matafan
Posté le 30-03-2005 à 19:42:04  profilanswer
 

fgets te permet de lire une chaine qui a ete saisie, pas un float directement. Le premier argument est l'adresse du buffer ou la chaine lue sera ecrite. Le deuxieme est la taille du buffer, qui permettra a fgets de ne pas deborder. Le dernier argument est le flot sur lequel tu veux lire l'entree (stdin dans ton cas).

n°1030786
Emmanuel D​elahaye
C is a sharp tool
Posté le 31-03-2005 à 10:50:06  profilanswer
 

elessar53 a écrit :

Merci Emmanuel mais j'arrive franchement pas à utiliser fgets() pour recuperer une seule valeur. y'a 3 arguments à fournir à la fonction. qu'est ce qu'il faut ecrire pour mettre un nombre dans la variable choix sans que sa plante ??? fgets(choix) marche po :-(


J'ai donnée des exemples sur mon site...
 
Montre ton code.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1030829
elessar53
con comme un drapeau
Posté le 31-03-2005 à 11:22:00  profilanswer
 

Citation :

Le premier argument est l'adresse du buffer ou la chaine lue sera ecrite. Le deuxieme est la taille du buffer, qui permettra a fgets de ne pas deborder. Le dernier argument est le flot sur lequel tu veux lire l'entree (stdin dans ton cas).


donc si je mets fgets(&choix,??,stdin); sa devrai marcher. La taille elle est à mettre en octet, en bits ? que represente stdin ?
 
Emmanuel >> le code est dans le premier message

n°1030885
Emmanuel D​elahaye
C is a sharp tool
Posté le 31-03-2005 à 12:04:30  profilanswer
 

elessar53 a écrit :

Citation :

Le premier argument est l'adresse du buffer ou la chaine lue sera ecrite. Le deuxieme est la taille du buffer, qui permettra a fgets de ne pas deborder. Le dernier argument est le flot sur lequel tu veux lire l'entree (stdin dans ton cas).


donc si je mets fgets(&choix,??,stdin); sa devrai marcher. La taille elle est à mettre en octet, en bits ? que represente stdin ?
 
Emmanuel >> le code est dans le premier message


  • Qu'est-ce que tu n'as pas compris dans la réponse de Matafan ?  
  • As-tu fais des essais ? Montre ton code.  
  • As-tu déjà ouvert un livre de C. Si non, fait le, si oui, recommence.
  • As-tu lu mon site ?  
  • Dans ton code initial, il n'y a pas de fgets().
  • 'choix' est-il bien un tableau de char de taille 3 au minimum ?
  • Le deuxième paramètre est-il bien la taille du tableau 'choix' (sizeof choix) ?
  • Le troisième paramètre est-il bien stdin (puisque tu veux lire à partir de l'entrée standard à la quelle ton clavier est probablement connecté).
  • Montre ton code (j'enfonce le clou...)
  • As-tu pensé à agiter ton neurone avant de t'en servir (sinon les idées, elles restent au fond...) ?


Message édité par Emmanuel Delahaye le 31-03-2005 à 12:05:11

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

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

  faire un menu implantable en C

 

Sujets relatifs
Fixer un menu (probleme en fonction de la resolution)Menu deroulants, impossible d'en sortir
Mon menu CSS décale tout !!!OK avec Firefox, pas bien avec IE, pb dreamweaver menu déroulants
css et menuMenu CSS
Menu dynamique (problème avec visibility)probleme de decalage d'un sous menu en javascript avec IE
rendre impossible de cliquer sur un menu[VBA] Access, rafraichir automatiquement un menu déroulant
Plus de sujets relatifs à : faire un menu implantable en C


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