[langage C] evenement clavier

Résolu/Fermé
kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013 - 27 janv. 2009 à 16:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 déc. 2012 à 20:15
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.
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
27 janv. 2009 à 16:50
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
2
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
27 janv. 2009 à 17:04
Ncurses devrait pouvoir gérer ça quelque soit l'Os non?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
27 janv. 2009 à 18:26
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.
0
kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013 5
27 janv. 2009 à 18:40
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 ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013
27 janv. 2009 à 18:53
Sûrement car tu affiches ta matrice alors que tu es en mode raw. Car lorsque tu vas afficher \n, le système ne va pas repasser à la ligne. Il faut dans ce cas utiliser "\r\n". Ou alors, tout simplement tu repasses en mode cooked ;).
0
kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013 5 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
27 janv. 2009 à 19:07
Ok, je ne repasse en mode cooked que en quittant mon programme et non au ré affichage de ma matrice ^^. J'ai eu le même problème avec mon invite de commande quand j'ai oublié de quitter le ce mode en sortie de programme.

Merci a toi.
0
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).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 déc. 2012 à 20:15
Ouais, mais ça ne marche pas sur Linux, ce qui était l'objet du post...
0