Ferramentas de Usuário

Ferramentas de Site


dev_geral:c:kbhit

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;
        }        
    }
}
dev_geral/c/kbhit.txt · Última modificação em: 2018/05/14 21:37 (edição externa)