Post by AntyDeskComo puedo capturar las teclas pulsadas directamente (sin utilizar
scanf ni nada de eso) ?
Como tengo un ratito y tenía un ejemplo parecido espero que te sirva
alguna de estas tres formas de hacerlo. Ojo, las respuestas que te voy a
dar son muy Unix-céntricas (y, en mi opinión, bastante fuera de
temática).
La primera es la más sencilla, y la única que sólo utiliza funciones
estándar de C (aunque con una pequeña trampa, necesitas el comando
stty):
/**************/
/* con_stty.c */
#include <stdlib.h>
#include <stdio.h>
#define CBREAK_ON "stty cbreak"
#define CBREAK_OFF "stty -cbreak"
int main(void) {
char caracter;
system(CBREAK_ON);
caracter = fgetc(stdin);
system(CBREAK_OFF);
printf("\nHas tecleado: %c\n", caracter);
return 0;
}
/**************/
La siguiente necesita la librería ncurses:
/*****************/
/* con_ncurses.c */
#include <ncurses.h>
int main(void) {
char caracter;
initscr();
cbreak();
caracter = getch();
printw("\nHas tecleado: %c\n", caracter);
refresh();
getch();
nocbreak();
endwin();
return 0;
}
/*****************/
Y ya, la última, necesita utilizar funciones POSIX:
/***************/
/* con_posix.c */
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
void canon_toggle(void) {
struct termios settings;
tcgetattr(0, &settings);
settings.c_lflag = settings.c_lflag ^ ICANON;
tcsetattr(0, TCSANOW, &settings);
}
int main(void) {
char caracter;
canon_toggle();
caracter = fgetc(stdin);
canon_toggle();
printf("\nHas tecleado: %c\n", caracter);
return 0;
}
/***************/
Ojo, que ninguno de los programas tiene comprobaciones de error.
Espero que te sirva de algo, un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>