¿Qué devuelve getch() en Turbo C?Estoy seguro de que no son valores ASCII para las teclas presionadas.

StackOverflow https://stackoverflow.com//questions/25045096

  •  21-12-2019
  •  | 
  •  

Pregunta

¿Qué devuelve getch() en Turbo C?Lo usé para inicializar las teclas de flecha de un programa, los valores devueltos por getch() fueron 77, 80, 72 y 75, que son valores ASCII para alfabetos, lo que indica claramente que no son valores ASCII.Si no son valores ASCII, ¿qué son?

¿Fue útil?

Solución

getch() proporcionado en el no estándar conio.h devuelve un entero:

#include <conio.h>

int     getch(void);

de la referencia:

A single character from the predefined standard input handle is read and returned. 
The input is not buffered. If there is a character pending from ungetch 
(see section ungetch), it is returned instead. The character is not echoed to the 
screen. This function doesn't check for special characters like Ctrl-C.

If the standard input handle is connected to the console, any pending output in the 
stdout and stderr streams is flushed before reading the input, if these streams are 
connected to the console.

Return Value

    The character.

Portability

    ANSI/ISO C  No
    POSIX       No 

Tu problema con las teclas de flecha es que no son caracteres de un solo byte.Para poder manejar las teclas de flecha debes manejar multibyte códigos.Los números que obtiene son simplemente uno de los dos bytes de los códigos clave.

Para ver un ejemplo de lectura de códigos, consulte (Cómo leer las teclas de flecha) Código de trucos en programación C (cuando se ingresa desde el teclado)

Otros consejos

La función

getch () devuelve dos códigos clave para las teclas de flecha (y algunas otras teclas especiales), devuelve 0 (0x00) o 224 (0xe0) primero, y luego devuelve un código que identifica la clave que se presionó.

Para las teclas de flecha, devuelve 224 seguido por primera vez por 72 (arriba), 80 (abajo), 75 (izquierda) y 77 (derecha).Si se presionan las teclas de flecha de num-pad (con NumLock Off), GOTCH () devuelve 0 primero en lugar de 224.

Entonces, puedes hacer algo como:

char ch = getch ();
if (ch == 0 || ch == 224)
{
    switch (getch ())
    {
    case 72:
        /* Code for up arrow handling */
        break;

    case 80:
        /* Code for down arrow handling */
        break;

    /* ... etc ... */
    }
}

Tenga en cuenta que GOTCH () no está estandarizada de ninguna manera, y estos códigos pueden variar de compilador a compilador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top