2010-03-30 18 views
8

¿Cómo consigo una entrada desde el teclado, sin necesidad de pulsar 'retorno' en C/Mac OsObtener una entrada desde el teclado sin 'retorno' en C

+2

Esto es específico de sistema operativo, por lo que puede obtener mejores respuestas si indica en qué sistema operativo está interesado. – Brian

+0

Se agregó una etiqueta de sistema operativo de la mención en el cuerpo de la pregunta. –

+0

Wow, el texto en realidad decía Mac OS. Totalmente no me di cuenta de esto :) – Brian

Respuesta

5

En los sistemas Unix con terminales (supongo que MacOS X califica), entonces necesitas configurar el terminal al modo llamado "cbreak". El punto es que el terminal mantiene los datos hasta que se presiona "return", por lo que no hay nada que pueda hacer su código C, a menos que indique al terminal que no realice dicho almacenamiento en memoria intermedia. Esto a menudo se denomina "modo de interrupción" e implica la función tcsetattr().

Un poco de google encontró this code que parece estar bien. Una vez que la terminal se encuentre en el modo de bloqueo, podrá leer los datos tal como vienen con las llamadas estándar getchar() o fgetc().

+0

También es posible forzar la "línea hasta el momento" al presionar Ctrl-D (y cuando se hace en una línea vacía, esto resulta en 0 caracteres legibles, esto indica un final de condición de archivo). – Vatine

2

Si usted tiene que manejar los detalles a sí mismo, utilizar una variante maldiciones. Si está disponible, prefiera "ncurses" sobre "curses". Tenga en cuenta que algunas teclas son "Meta" que realmente solo modifican los códigos de las teclas base. Hay varios "modos" para leer la entrada clave, que van desde "cocinado", pasando por "parcialmente cocido" hasta "crudo". Cada modo tiene sus propias peculiaridades, lea la documentación cuidadosamente.

A veces es mejor utilizar el código de manejo de claves existente de varias bibliotecas de programación de juegos, he oído hablar de algunos buenos resultados utilizando los bucles de exploración de teclas de SDL. Eso fue hace un tiempo, así que tal vez existan kits de herramientas más nuevos (y mejores).

Cuestiones relacionadas