lectura de teclado (buffer ?)
Alguién sabe como leer el teclado solo en el momento de pulsar una tecla?
Exite algun buffer que almacena lecturas de teclado
que se pueda borrar antes de ejecutar un getch() ?
gracias
Exite algun buffer que almacena lecturas de teclado
que se pueda borrar antes de ejecutar un getch() ?
gracias
Hay muchas maneras de hacer lo que decis pero si no me equiboco lo que queres es que getch() no se pare antes de leer. Si queres borrar el buffer del teclado podes acudir al hardware (poco portable de compilador a compilador y MUY feo) o hacerte una rutinita corta que borre el buffer del teclado. Esta que va aca anda con todo compilador que soporte las librerias conio.h
void clrkb () {
while (kbhit()) getch(); // Mientras alla tecla hacer getch.
}
Podes recurrir a pokeb para cambiar el puntero del buffer del teclado que esta en algun lugar de la memoria pero solo funca en modo real (no si usas gcc o cc386 dev-c++ etc) y a mi nunca me funciono asi que no te lo recomiendo.
Para leer una tecla solo en el momento y que no se te detenga el programa podes hacer un pollin looop asi:
...
if (kbhit()) // Si se pulsa una tecla
c = getch(); // -hacer solo en ese momento getch
else c=0; // Sino anular la variable (opcional)
Espero que sirva.
Saludos
Martin
void clrkb () {
while (kbhit()) getch(); // Mientras alla tecla hacer getch.
}
Podes recurrir a pokeb para cambiar el puntero del buffer del teclado que esta en algun lugar de la memoria pero solo funca en modo real (no si usas gcc o cc386 dev-c++ etc) y a mi nunca me funciono asi que no te lo recomiendo.
Para leer una tecla solo en el momento y que no se te detenga el programa podes hacer un pollin looop asi:
...
if (kbhit()) // Si se pulsa una tecla
c = getch(); // -hacer solo en ese momento getch
else c=0; // Sino anular la variable (opcional)
Espero que sirva.
Saludos
Martin
La parte del kbhit() ya la conozco, y de hecho es la que uso, ya que solo leo teclas si se pulsa el teclado.
Mi problema viene cuando se pulsan teclas mientras que el programa esta haciendo otras cosas, o procesos largos, y cuando regresa a la parte de leer teclado de nuevo, automaticamente coje las teclas que pulse en otro momento... No se si me explico. Sucede algo parecido a cuando en Msdos haces un "dir" en un directorio grande, y antes de que acabe haces un "cls": pues se ejecuta el "dir" , y automaticamente al acabar te hace el "cls". Gracias de todos modos por la parte anterior.
Mi problema viene cuando se pulsan teclas mientras que el programa esta haciendo otras cosas, o procesos largos, y cuando regresa a la parte de leer teclado de nuevo, automaticamente coje las teclas que pulse en otro momento... No se si me explico. Sucede algo parecido a cuando en Msdos haces un "dir" en un directorio grande, y antes de que acabe haces un "cls": pues se ejecuta el "dir" , y automaticamente al acabar te hace el "cls". Gracias de todos modos por la parte anterior.
