getchar () devuelve el mismo valor (27) para las teclas de flecha arriba y abajo

Así que para la tecla de arriba del teclado, obtengo 27, sorprendentemente para la tecla de abajo, también tengo 27. Necesito que mi progtwig se comporte de manera diferente con las teclas de arriba y abajo, y parece que no puedo resolverlo. Estoy usando Linux, y necesito que funcione para Linux.

#include  #include  #include  #include  int main() { int c = getchar(); if(c==27) { printf("UP"); } if(c==28) { printf("DOWN"); } } 

El 27 implica que estás obteniendo secuencias de escape ANSI para las flechas. Serán secuencias de tres caracteres: 27, 91 y luego 65, 66, 67, 68 (IIRC) para arriba, abajo, derecha, izquierda. Si obtiene un 27 de una llamada a getchar() , getchar() dos veces más para obtener el 91 y el número que determina qué tecla de flecha se presionó.

Como alguien más mencionó, esto es específico de la plataforma, pero puede que no te importe.

Aquí está el progtwig, que está escrito para usar la biblioteca ncurses, y muestra las teclas de flecha presionadas.

 #include int main() { int ch; /* Curses Initialisations */ initscr(); raw(); keypad(stdscr, TRUE); noecho(); printw("Press E to Exit\n"); while((ch = getch()) != 'E') { switch(ch) { case KEY_UP: printw("\nUp Arrow"); break; case KEY_DOWN: printw("\nDown Arrow"); break; case KEY_LEFT: printw("\nLeft Arrow"); break; case KEY_RIGHT: printw("\nRight Arrow"); break; default: printw("\nThe pressed key is %c",ch); } } printw("\n\Exiting Now\n"); endwin(); return 0; } 

Durante la comstackción, debe vincularse a la biblioteca ncurses.

 gcc main.c -lncurses 

Aquí hay un tutorial para ayudarlo a comenzar con ncurses.

Consulte la biblioteca de ncurses en http://www.gnu.org/software/ncurses/ . Vincularlo a su progtwig le permitirá hacer todo tipo de cosas interesantes con eventos clave. Lea la documentación y vea si quiere usarla. Proporciona exactamente la funcionalidad que dices que estás buscando.

¡Feliz encoding!

Estás confundiendo las teclas que presionas con los caracteres que generan cuando se presionan. ¿Esperaría obtener un personaje cuando se presiona la tecla Mayús? Prueba este progtwig:

 #include  #include  #include  #include  int main() { do { int c = getchar(); printf("c=%d\n", c); } while (1); } 

Intenta golpear la flecha hacia arriba y luego entra. Luego intenta golpear la flecha hacia abajo y luego ingresa. Verás que la conversión de claves a caracteres no es simple.