faire un menu implantable en C - C - Programmation
Marsh Posté le 30-03-2005 à 15:35:15
elessar53 a écrit : Bonjour à tous. Je dois, dans un programme en C, réaliser un menu.<...> scanf("%d",&choix); |
La solution robuste a été exposée 10.000 fois... Utiliser fgets()...
http://mapage.noos.fr/emdel/notes.htm#saisie
Marsh Posté le 30-03-2005 à 15:54:40
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 :
|
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
Marsh Posté le 30-03-2005 à 16:12:39
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
|
Evidemment, ce n'est pas portable...
Marsh Posté le 30-03-2005 à 18:17:25
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 :-(
Marsh Posté le 30-03-2005 à 19:42:04
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).
Marsh Posté le 31-03-2005 à 10:50:06
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.
Marsh Posté le 31-03-2005 à 11:22:00
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
Marsh Posté le 31-03-2005 à 12:04:30
elessar53 a écrit :
|
Marsh Posté le 30-03-2005 à 12:43:53
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