" ¿Cómo evitar presionar Entercon getchar()
? "
En primer lugar, la entrada del terminal suele ser de línea o con búfer completo. Esto significa que el sistema operativo almacena la entrada real del terminal en un búfer. Por lo general, este búfer se descarga al programa cuando \n
se señalizó / proporcionó fe stdin
. Esto es hecho por una prensa para Enter.
getchar()
está al final de la cadena. No tiene capacidad para influir realmente en el proceso de almacenamiento en búfer.
" ¿Cómo puedo hacer esto? "
Abandone getchar()
en primer lugar, si no desea utilizar llamadas al sistema específicas para cambiar el comportamiento del terminal explícitamente como se explica en las otras respuestas.
Desafortunadamente, no existe una función de biblioteca estándar y con eso no hay una forma portátil de vaciar el búfer en la entrada de un solo carácter. Sin embargo, existen soluciones basadas en la implementación y no portátiles.
En Windows / MS-DOS, existen las funciones getch()
y getche()
en el conio.h
archivo de encabezado, que hacen exactamente lo que usted desea: leer un solo carácter sin la necesidad de esperar a que la nueva línea limpie el búfer.
La principal diferencia entre getch()
y getche()
es que getch()
no genera inmediatamente el carácter de entrada real en la consola, mientras que lo getche()
hace. El adicional "e"
significa eco .
Ejemplo:
#include <stdio.h>
#include <conio.h>
int main (void)
{
int c;
while ((c = getche()) != EOF)
{
if (c == '\n')
{
break;
}
printf("\n");
}
return 0;
}
En Linux, una forma de obtener el proceso de caracteres y salida directa es el uso de los cbreak()
y echo()
las opciones y la getch()
erefresh()
rutinas en el ncurses-biblioteca.
Tenga en cuenta que debe inicializar la llamada pantalla estándar con initscr()
y cerrar la misma con las endwin()
rutinas.
Ejemplo:
#include <stdio.h>
#include <ncurses.h>
int main (void)
{
int c;
cbreak();
echo();
initscr();
while ((c = getch()) != ERR)
{
if (c == '\n')
{
break;
}
printf("\n");
refresh();
}
endwin();
return 0;
}
Nota: Debe invocar el compilador con la -lncurses
opción, para que el enlazador pueda buscar y encontrar la biblioteca ncurses.