Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: AXA en 4 Enero 2022, 06:35 am



Título: Lectura teclado
Publicado por: AXA en 4 Enero 2022, 06:35 am
Quiero leer la letra o la tecla que escribo sin que el programa espere a que precione una.
en pascal esta el keypressed. Aqui no encuentro una funcion que diga si aprieto una tecla para leerla. Y getchar espera a que se apriete una. Quiero hacer un juego y estoy trabada con esto.


Título: Re: Lectura teclado
Publicado por: .xAk. en 4 Enero 2022, 09:04 am
Depende del sistema. Con las ncurses es muy sencillo, pero no para win.  Con SDL (https://www.libsdl.org/), tienes funciones para ello, para todos los sistemas, o al api de win,  seguro dudas en windows, mírate: Using Keyboard Input (https://docs.microsoft.com//windows/win32/inputdev/using-keyboard-input)

Saludos


Título: Re: Lectura teclado
Publicado por: RayR en 4 Enero 2022, 16:34 pm
Como ya te dijeron, no hay forma estándar ni portable. O usas bibliotecas multiplataforma, como las que ya te mencionaron, o recurres a funciones específicas de cada sistema operativo. En Windows, la forma más sencilla y parecida a lo que se hace en Pascal es usar las funciones _kbhit() y _getch() (debes incluir "conio.h"). La primera verifica si hay una tecla presionada, y la segunda lee una tecla (que puede ser una de las "especiales", como Esc, las flechas, etc) sin esperar a que se presione Enter. Obviamente esto es muy distinto a lo que hace getchar().

No hay nada de malo en usar estas funciones cuando es necesario. Te lo digo porque a veces se critica de forma exagerada su uso. Sí, no son estándar de C o C++, pero es que no hay manera estándar de hacer lo que quieres, así que se justifica utilizarlas. Y conio.h es parte del runtime de C de Microsoft desde hace mucho, por lo que todo compilador para Windows que se precie la incluye, como es el caso de MinGW y, obviamente, VC++:

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getch-getwch?view=msvc-170
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/kbhit?view=msvc-170


Título: Re: Lectura teclado
Publicado por: Hextor en 5 Enero 2022, 13:56 pm
Es que getchar() intenta leer del fichero de entrada stdin, si hay algo en el buffer lo pilla, sino espera a que metas tú algo. Lo que sucede es que estás intentado usar funciones que están orientadas a meter valores por entrada estandar de ejecución del programa, una consola por lo general.

Para hacer algo como un videojuego en C, deberías utilizar unas librerias a modo de framework que ya implementen funciones que te permiten recibir eventos.

Eso, o si lo estás haciendo de forma didactica, buscar en la api de windows algo que te permita manejar eventos del teclado, yo nunca lo he heco, pero librerias para C de juegos de alguna forma lo tienen que implementar.


Título: Re: Lectura teclado
Publicado por: .xAk. en 8 Enero 2022, 19:49 pm
pruebalo, es divertido hacerlo con ellas

(https://www.libsdl.org/media/SDL_logo.png) (https://www.libsdl.org/)

(https://i.imgur.com/kH23Aet.png) (http://www.losersjuegos.com.ar/referencia/libros)

SaludOS