fgets espera por '\ n' antes de obter a entrada para o buffer [duplicado]

Jan 02 2021

Estou tentando usar o fgets de stdin e ele começa a coletar dados da tela somente depois de digitar '\ n'. até que o '\ n' esteja preso.

nota: eu não tenho nenhum scanf em meu código

a parte relevante do código:

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

Respostas

JonathanLeffler Jan 03 2021 at 22:43

Uma vez que fgets()se destina a ler uma linha de dados, até e incluindo a primeira nova linha (ou para EOF), está se comportando conforme planejado.

Além disso, a menos que você faça algo sofisticado com as configurações do terminal, o terminal não enviará o conteúdo da linha de dados para os programas que estão lendo do terminal até que uma nova linha seja atingida. Consulte Entrada de terminal canônico vs não canônico para obter mais informações de uma perspectiva POSIX (Unix). Portanto, tentar ler um caractere via fgets(Input, 2, stdin)não receberá nenhuma entrada até que uma nova linha seja inserida.

Você tem que trabalhar com APIs específicas da plataforma se quiser entrada assim que estiver disponível. Isso significa que o que você faz no Windows será diferente do que você faz nos sistemas baseados em POSIX - os vários sabores do Unix, incluindo o Linux. Mesmo em sistemas baseados em POSIX, você pode usar a cursesbiblioteca ou pode usar chamadas de sistema de nível inferior, e há várias maneiras de fazer isso.