Détection des frappes

Je dois détecter une frappe sans que l’utilisateur n’appuie sur Entrée. Quelle est la manière la plus élégante?

Par exemple, si l’utilisateur tape la lettre Q sans appuyer sur Entrée , le programme fait quelque chose.

Dans unix / posix, la méthode standard consiste à placer l’entrée en mode non canonique avec tcsetattr:

 #include  #include  : struct termios attr; tcgetattr(0, &attr); attr.c_lflag &= ~ICANON; tcsetattr(0, TCSANOW, &attr); 

Reportez-vous à la page de manuel termios (3) pour plus de détails (et probablement plus d’informations que vous ne voudriez connaître).

Pour autant que je sache, il n’ya pas d’autre moyen de le faire de manière portable que d’utiliser une bibliothèque comme ncurses , qui fournit la fonction getch(void) .

Remarque: il apparaît que getchar(void) de stdio.h attend que la touche Entrée soit enfoncée, puis vous alimente les caractères afin que cela ne fonctionne pas.

Dans Windows, fournit la fonction _getch(void) qui peut être utilisée pour lire les frappes sans leur faire écho (imprimez-les vous-même si vous le souhaitez).

 #include  #include  int main( void ) { int ch; puts( "Type '@' to exit : " ); do { ch = _getch(); _putch( ch ); } while( ch != '@' ); _putch( '\r' ); // Carriage return _putch( '\n' ); // Line feed }