2010-10-26 18 views
12

He estado buscando un equivalente a kbhit() y he leído varios foros sobre este tema, y ​​la mayoría parece sugerir utilizar ncurses.Crear una función para comprobar si se presionó la tecla en Unix usando ncurses

¿Qué debo hacer para verificar si se presiona una tecla en C++ usando ncurses.

La función getch() proporcionada por ncurses lee el carácter de la ventana. Me gustaría escribir una función que solo compruebe si hay una tecla presionada y luego quiero hacer getch().

Gracias de antemano.

Respuesta

14

Puede usar la función nodelay() para convertir getch() en una llamada no bloqueante, que devuelve ERR si no está presionada la tecla. Si está disponible una pulsación de tecla, se saca de la cola de entrada, pero puede volver a colocarla en la cola si lo desea con ungetch().

#include <ncurses.h> 
#include <unistd.h> /* only for sleep() */ 

int kbhit(void) 
{ 
    int ch = getch(); 

    if (ch != ERR) { 
     ungetch(ch); 
     return 1; 
    } else { 
     return 0; 
    } 
} 

int main(void) 
{ 
    initscr(); 

    cbreak(); 
    noecho(); 
    nodelay(stdscr, TRUE); 

    scrollok(stdscr, TRUE); 
    while (1) { 
     if (kbhit()) { 
      printw("Key pressed! It was: %d\n", getch()); 
      refresh(); 
     } else { 
      printw("No key pressed yet...\n"); 
      refresh(); 
      sleep(1); 
     } 
    } 
} 
Cuestiones relacionadas