[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
11067
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.

2 réponses

fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804
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 521
27 janv. 2009 à 17:04
Ncurses devrait pouvoir gérer ça quelque soit l'Os non?
0
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804 > 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
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804 > 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
11067
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
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804
16 déc. 2012 à 20:15
Ouais, mais ça ne marche pas sur Linux, ce qui était l'objet du post...
0