Detección de pulsaciones de teclas

Necesito detectar una pulsación de tecla, sin que el usuario presione Intro. ¿Cuál es la forma más elegante?

Es decir, si el usuario golpea la letra Q , sin pulsar Intro , el progtwig hace algo.

En Unix / Posix, la forma estándar de hacer esto es poner la entrada en modo no canónico con tcsetattr:

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

Consulte la página del manual de termios (3) para obtener más detalles (y probablemente más información de la que desea conocer).

No hay una buena manera de hacer esto de forma portátil, que yo sepa, aparte de usar una biblioteca como ncurses , que proporciona la función getch(void) .

Nota: aparece getchar(void) de stdio.h espera hasta que se presiona la tecla enter y luego alimenta los caracteres, por lo que no funcionará.

En Windows proporciona la función _getch(void) que se puede usar para leer las pulsaciones de teclas sin _getch(void) usted mismo si lo desea).

 #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 }