Attente de pression d'une touche + savoir quelle touche à été pressée

Attente de pression d'une touche + savoir quelle touche à été pressée - C - Programmation

Marsh Posté le 23-12-2005 à 13:12:59    

Bonjour tout le monde!
 
Bon alors sans plus attendre voici ma situation et ensuite mon problème : Je n'en suis pas à mes premiers pas en C/C++, en revanche j'en suis à mes premiers pas concernant l'interaction entre le programme et l'utilisateur.
 
Mon problème : Bon ce qu'est mon programme n'a pas d'intérêt pour la résolution du problème en question donc passons les lignes de codes. Ce que je cherche à faire, c'est mettre le programme en attente jusqu'à la pression d'une touche!
 
Attendez la suite avant de me frapper svp!
 
getch() ou getchar() me direz vous? Et bien non ce n'est pas ce que je cherche.... En fait je souhaiterais que l'utilisateur presse une (seule et unique) touche (n'importe laquelle et pas seuleument entrée) et qu'ensuite l'exécution du programme reprenne. Mais en plus de ça, je voudrais pouvoir connaitre quelle est la touche qui a été pressée.
 
Voilà!
Il s'agit d'un programme en mode console sur windows.
 
En vous remerciant par avance et vous priant de ne pas me frapper trop fort si mon topic est mal venu.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-12-2005 à 13:12:59   

Reply

Marsh Posté le 23-12-2005 à 13:31:50    

Rien de portable, sous Windows tu dois avoir un kbhit() qui traine je crois.

Reply

Marsh Posté le 23-12-2005 à 13:34:01    

ben, getch te permet de savoir quelle est la touche qui a été pressée
kbhit te sera utile si tu as des traitements à faire en attendant que l'utilisateur presse la touche, mais ca n'a pas l'air d'être le cas, au vu de ce que tu décris

Reply

Marsh Posté le 23-12-2005 à 14:00:12    

Oui, getch doit te tirer d'affaire. Regarde l'exemple dans la msdn.

Reply

Marsh Posté le 23-12-2005 à 14:31:53    

Oui mais getch() n'attend pas seleument qu'une seule touche soit pressée, il faut également valider par entre la saisie et ce n'est vraiment pas ce qu'il me faut....
 
J'ais jetté un oeil sur l'exemple de la msdn, ce qu'ils donnent permet de faire du traitement jusqu'à ce qu'une touche soit pressée mais ne résoud pas mon problème ou alors j'ai pas bien fait attention.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-12-2005 à 14:37:03    

dwogsi a écrit :

Oui mais getch() n'attend pas seleument qu'une seule touche soit pressée, il faut également valider par entre la saisie et ce n'est vraiment pas ce qu'il me faut....


Faux ... relis la doc

Reply

Marsh Posté le 23-12-2005 à 14:38:03    

J'y vais de ce pas!


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-12-2005 à 14:56:25    

Bon j'ai vu des choses pour rendre gecth() non bloquant avec ncurses.h et nodelay() mais rien d'autre.....


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-12-2005 à 14:59:54    

dwogsi a écrit :

Bon j'ai vu des choses pour rendre gecth() non bloquant avec ncurses.h et nodelay() mais rien d'autre.....


 
 
 :heink: fais un exemple applicatif minimal et reviens nous dire ce qui ne va pas avec getch ... parce que si ca ne colle pas à ce que tu cherches, c'est que ta requête était erronnée ...

Reply

Marsh Posté le 23-12-2005 à 15:03:44    

Bon alors simplement:
ce que je constate (chez moi en tout cas) c'est que getch() stop l'exécution du programme et c'est ce qui me géne.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-12-2005 à 15:03:44   

Reply

Marsh Posté le 23-12-2005 à 15:05:47    

donc, le problème n'est pas qu'il faut appuyer sur la touche entrée, CQFD ...
 
retour à la case départ : sous windows, tu as la fonction kbhit qui fait ce que tu souhaites

Reply

Marsh Posté le 23-12-2005 à 15:12:37    

theshockwave a écrit :

donc, le problème n'est pas qu'il faut appuyer sur la touche entrée, CQFD ...


Peut être me suis-mal exprimé oui...
 
Concernant kbhit très bien ca renvoit 0 si pas de touhe pressée et 1 si touche pressée avec un while c'est ok pour attendre qu'une touche soit pressée, mais comment savoir laquelle a été pressée?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 23-12-2005 à 15:15:12    

Citation :

_kbhit
Requirements
<conio.h>
 
Checks the console for keyboard input.
 
int _kbhit( void );
Return Value
_kbhit returns a nonzero value if a key has been pressed. Otherwise, it returns 0.
 
Remarks
The _kbhit function checks the console for a recent keystroke. If the function returns a nonzero value, a keystroke is waiting in the buffer. The program can then call _getch or _getche to get the keystroke.


 
on ne sera pas toujours là pour te lire la doc, hein ...

Reply

Marsh Posté le 23-12-2005 à 15:17:30    

Vraiment désolé, ça fait partie de ces choses que j'ais sous les yeux et que pourtant je ne vois pas. Encore pardon et merci bien :jap:


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed