[langage C] evenement clavier
Résolu
kaham
Messages postés
174
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un programme qui demande a l'utilisateur d'entrer une action a la fois, indéfiniment de façon a déplacer un point dans une matrice autant de fois qu'il le souhaite jusqu'à ce qu'il veille quitter le programme.
Mais a chaque fois taper z,q,s,d, suivit de ENTER est assez fastidieux surtout quand la matrice est grande.
Je voudrais que l'utilisateur n'aille qu'a appuyer sur la touche z,q,s ou d (donc sans valider par ENTER) pour déplacer le point dans la matrice.
utilisant linux je suis un peut limiter sur certaine lib et donc certaine fonction... J'ai tout de même trouver des fonctions comme getc, fgetc, getchar mais dans tous les cas il faut valider par ENTER.
J'ai un programme qui demande a l'utilisateur d'entrer une action a la fois, indéfiniment de façon a déplacer un point dans une matrice autant de fois qu'il le souhaite jusqu'à ce qu'il veille quitter le programme.
Mais a chaque fois taper z,q,s,d, suivit de ENTER est assez fastidieux surtout quand la matrice est grande.
Je voudrais que l'utilisateur n'aille qu'a appuyer sur la touche z,q,s ou d (donc sans valider par ENTER) pour déplacer le point dans la matrice.
utilisant linux je suis un peut limiter sur certaine lib et donc certaine fonction... J'ai tout de même trouver des fonctions comme getc, fgetc, getchar mais dans tous les cas il faut valider par ENTER.
Configuration: Windows XP Firefox 3.0.5
2 réponses
-
Salut,
Il faut passer ta console en mode raw. Pour cela, la fonction cfmakeraw s'occupe de ça ;)
Si tu veux une implémentation : https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console#SCREEN_mode_raw_def-
- Oui, mais encore faut-il que ncurses soit installé sur la machine.
Si on programme sur linux, on peut ausi utiliser :system("stty -echo");system("stty raw");. Mais bon, pas trop conseillé.
Si on veut rester le plus portable possible, sur un système POSIX, il vaudra mieux utiliser cfmakeraw et sur windows, utiliser ses bibliothèques.
-
Merci pour le lien il ma beaucoup aider. J'ai utilisé la fonction proposée sur ce cite et cela fonctionne excepté une chose...
Voici la représentation de l'affichage de ma matrice avec 2 boucles for() imbriquées lors de l'exécution :| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |.| | | | | | | | | | | | | | | | | | | | | | |
Mais dés l'appuie d'une touche (peut importe la quelle) voici comment est affichée ma matrice :| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |.| | | | | | | | | | | | | | | | | | | | | | |
et ainsi de suite... par contre le point ce déplace correctement avec z,q,s,d.
Mais pourquoi l'affichage ce fait-il comme cela ?
-
-
Le sujet date un peu mais pour ceux qui comme moi ont dérivé sur ce post, il existe une solution plus simple pour récupéré une entrée clavier en mode console sans que l'utilisateur est à appuyer sur Enter.
Il suffit simplement d'utiliser la commande getch (à ne pas confondre avec getchar).