fgets attende '\ n' prima di ricevere l'input nel buffer [duplicato]

Jan 02 2021

Sto cercando di usare fgets da stdin e inizia a raccogliere dati dallo schermo solo dopo aver digitato '\ n'. finché "\ n" non si blocca.

nota: non ho alcun scanf nel mio codice

la parte rilevante del codice:

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

Risposte

JonathanLeffler Jan 03 2021 at 22:43

Dal momento che fgets()è destinato a leggere una riga di dati, fino alla prima riga di testo inclusa (o all'EOF), si comporta come previsto.

Inoltre, a meno che tu non faccia qualcosa di stravagante con le impostazioni del terminale, il terminale non invierà il contenuto della riga di dati ai programmi che leggono dal terminale fino a quando non viene toccata una nuova riga. Per ulteriori informazioni da una prospettiva POSIX (Unix), vedere Input da terminale canonico e non canonico . Quindi provare a leggere un carattere tramite fgets(Input, 2, stdin)non riceverà alcun input fino a quando non viene inserita una nuova riga.

Devi lavorare con API specifiche della piattaforma se desideri input non appena è disponibile. Ciò significa che quello che fai su Windows sarà diverso da quello che fai sui sistemi basati su POSIX - le varie versioni di Unix, incluso Linux. Anche su sistemi basati su POSIX, potresti usare la curseslibreria o potresti usare chiamate di sistema di livello inferiore e ci sono molti modi per farlo.