Tecla premida sem ENTER - kbhit
Muitos questionam-se sobre como ler uma tecla premida pelo utilizador durante um ciclo sem que este faça pausa. Os métodos habituais, nomeadamente o getchar
(ou o getch
da biblioteca conio.h
), forçarão o ciclo a parar.
Isto torna-se fácil de se entender quando temos um ciclo que realiza um processo mais complexo e moroso, e queremos que, se o utilizador desista do processo, prima ESC e o processo termine: evita-se que o utilizador, ou tenha de esperar até ao fim, ou tenha de fechar e voltar a iniciar a aplicação.
O código que nos indica que o utilizador premiu uma tecla durante um processo, sem necessidade de pausa do programa, é o kbhit
. Diremos em português "se uma tecla foi premida, então faz <comandos>". Em C:
if (kbhit()) {
comandos;
}
Aplicando directamente no exemplo do ciclo, que se interrompe em caso de ESC:
char c = 0
while (condição_de_paragem_normal) {
comandos;
if ( kbhit() ) {
c = getch();
if (c == 27) {
printf("Processo interrompido.\n");
break;
}
}
}