stdout è bufferizzato in linea quando connesso a un terminale, ma mi ricordo di aver letto da qualche parte che la lettura (almeno da stdin) svuoterà automaticamente lo stdout. Tutte le implementazioni C che ho usato hanno fatto questo, ma non riesco a trovarlo nello standard ora.Lettura da stdin flush stdout?
ha senso che funziona in questo modo, altrimenti il codice come questo:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
avrebbe bisogno di un extra fflush(stdout);
Così è stdout garantito per essere lavata qui?
EDIT:
Come diverse risposte hanno detto, non sembra esserci alcuna garanzia nella norma che l'uscita a stdout nel mio esempio apparirà prima della lettura da stdin, ma d'altra parte , questo intento è indicato nel (mio progetto copia gratuita) della norma:
l'ingresso e di uscita dinamica della dispositivi interattivi avranno luogo come specificato in 7.19.3. L'intento di questi requisiti è che l' senza buffer o l'uscita bufferizzata di linea vengano visualizzati non appena possibile , per garantire che i messaggi di richiesta vengano effettivamente visualizzati prima di un programma in attesa di input.
(ISO/IEC 9899: Comitato TC2 Progetto - 6 maggio 2005, pagina 14).
Quindi sembra che non ci sia alcuna garanzia, ma probabilmente funzionerà comunque nella maggior parte delle implementazioni. (Ultime parole famose ...)
Seguendo il rinvio a 7.19.3 (7.21.3 a C11) è anche utile, poiché menziona quali operazioni di input dovrebbero causare rossore. Questi sono discussi su https://stackoverflow.com/a/39536803/8586227. –