Controlar teclas especiales con C (flechas, ENTER, TAB, ESC) en entornos Windows

Cuando programamos en C, nos enseñan desde primera hora a usar las funciones típicas de entrada/salida presentes en stdio.h: printf(), scanf(), getchar(), gets()… pero normalmente se obvia el uso de funciones algo más avanzadas para detectar pulsaciones de teclas o interactuar de forma más directa con la terminal.

Hoy os explicaré para qué sirven dos funciones: getch() y getche(), disponibles en conio.h (como ya advierto en el título de la entrada, este código funciona en entornos Windows, en entornos Linux ya explicaré en otra entrada cómo se puede hacer).

  • getch(): devuelve un char que representa el código ASCII de la tecla pulsada
  • getche(): ídem que el anterior, pero además lo imprime por pantalla

Veamos un ejemplo en el que detectamos la pulsación de las flechas del teclado, la tecla ENTER y el tabulador:

#include <stdio.h>
#include <conio.h>

int main()
{
    char cTecla;

    printf("\r\nPresione un Tecla ...");

    while(cTecla != 27)
    {
       cTecla = getch();
       if(cTecla == 0)
           cTecla = getch();
       else
           switch(cTecla)
           {
            case 13:
                 printf("\r\n Presiono ENTER");
            break;
            
            case 9:
                 printf("\r\n Presiono TAB");
            break;
            
            case 72:
                 printf("\r\n Presiono Flecha Arriba");
            break;
            
            case 80:
                 printf("\r\n Presiono Flecha Abajo");
            break;
            
            case 75:
                 printf("\r\n Presiono Flecha izquierda");
            break;
            
            case 77:
                 printf("\r\n Presiono Flecha derecha");
            break;
            }
    }
    
    return 0;
}