Touche entrée en c

Fermé
vadim1303 Messages postés 10 Date d'inscription samedi 11 février 2012 Statut Membre Dernière intervention 12 juin 2019 - 9 oct. 2016 à 11:30
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 10 oct. 2016 à 14:18
Bonjour,
je développe un programme en c qui permet l'activation/désactivation d'une alarme a 5 caractères.
C'est sous forme d'une machine à état et se déroule de la forme suivante :
je suis dans l'etat 1, si j'appui sur 'p' je passe dans l'etat 2 sinon je reste dans l'etat 1.
Mon problème est que lorsque je déroule le programme, il prend bien en compte l'appui sur 'p' mais il prend aussi en compte l'appui sur la touche entrée, donc je me retrouve tout le temps dans l'etat 1 de mon programme.
Comment eviter de prendre en compte la touche entrée ?
Merci beaucoup

2 réponses

Utilisateur anonyme
9 oct. 2016 à 17:19
ça dépend de la façon dont tu récupères l'appui
0
vadim1303 Messages postés 10 Date d'inscription samedi 11 février 2012 Statut Membre Dernière intervention 12 juin 2019
9 oct. 2016 à 18:44
J'ai essayé avec un scanf et un getchar, j'ai le meme soucis ...
0
Utilisateur anonyme
10 oct. 2016 à 09:23
Si tu veux "attraper" les appuis sur les touches de façon événementielle, tu peux utiliser une librairie comme ncurses
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
10 oct. 2016 à 14:18
Salut,

ncurses ou PDCurses sont bien si tu veux faire un programme portable et si ces bibliothèques sont compatibles avec la ou les plateforme(s) visées, mais cela suppose d'installer une bibliothèque et d'apprendre à l'utiliser, l'initialiser correctement, gérer les ressources, etc.

Si tu es sous Windows et que tu veux juste récupérer l'appui d'une touche, tu peux faire plus simple en utilisant _getch()

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getch-getwch?redirectedfrom=MSDN&view=msvc-160&viewFallbackFrom=vs-2019

en combinaison avec _kbhit(), cela te permet même de créer du code non bloquant faisant autre chose si une touche n'est pas pressée. Tu as un exemple là :

https://stackoverflow.com/questions/15603082/how-to-use-kbhit-and-getch-c-programming#answer-15603102

Autrement, toujours sous Windows, on peut utiliser l'API Windows et sa fonction ReadConsoleInput pour faire la même chose et bien plus :

https://docs.microsoft.com/en-us/windows/console/readconsoleinput?redirectedfrom=MSDN (doc)
https://docs.microsoft.com/en-us/windows/console/reading-input-buffer-events?redirectedfrom=MSDN (exemple de code)

Bien sûr, ces fonctions Windows ne sont pas portables et sont propres à Windows.

Mais pour un petit projet de simulation d'une alarme sous Windows, cela peut faire le job :-)

Si tu développes un vrai programme qui va piloter une vraie alarme, alors l'environnement d'exécution du code est crucial et va déterminer les API que tu pourras utiliser. Mais là, on n'en sait rien, car tu ne donnes pas d'infos véritablement là dessus.


Dal
0