fgets espera '\ n' antes de recibir la entrada en el búfer [duplicado]

Jan 02 2021

Estoy tratando de usar fgets de stdin y comienza a recopilar datos de la pantalla solo después de escribir '\ n'. hasta que el '\ n' esté atascado.

nota: no tengo ningún escaneo en mi código

la parte relevante del código:

while (reconnect_flag)
    {
        printf("%s\n", RECONNECT_MENU);
        char Input[2] = "";
        fgets(Input, 2, stdin);
    }

Respuestas

JonathanLeffler Jan 03 2021 at 22:43

Dado que fgets()está destinado a leer una línea de datos, hasta la primera línea nueva (o EOF) incluida, se comporta como se esperaba.

Además, a menos que haga algo elegante con la configuración del terminal, el terminal no enviará el contenido de la línea de datos a los programas que leen desde el terminal hasta que se ingrese una nueva línea. Consulte Entrada de terminal canónica frente a no canónica para obtener más información desde una perspectiva POSIX (Unix). Por lo tanto, intentar leer un carácter a través de fgets(Input, 2, stdin)no recibirá ninguna entrada hasta que se ingrese una nueva línea.

Debe trabajar con API específicas de la plataforma si desea recibir información tan pronto como esté disponible. Eso significa que lo que haga en Windows será diferente de lo que hace en los sistemas basados ​​en POSIX: los distintos tipos de Unix, incluido Linux. Incluso en sistemas basados ​​en POSIX, puede usar la cursesbiblioteca o puede usar llamadas al sistema de nivel inferior, y hay varias formas de hacerlo.