Stdout ist Line-gepuffert, wenn an ein Terminal angeschlossen ist, aber ich erinnere mich irgendwo lesen, dass Lesen (zumindest von Stdin) automatisch stdout flush. Alle C-Implementierungen, die ich verwendet habe, haben dies getan, aber ich kann es jetzt im Standard nicht finden.Liest von stdin flush stdout?
Es macht Sinn, dass es so funktioniert, sonst Code wie folgt:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
müsste eine zusätzliche fflush(stdout);
So garantiert stdout hier gespült werden?
EDIT:
Wie mehr Antworten gesagt haben, scheint es keine Garantie in der Norm zu sein, dass die Ausgabe in meinem Beispiel nach stdout wird vor dem Lesen von stdin erscheinen, aber auf der anderen Seite wird diese Absicht in (meine freien Entwurf Kopie) die Norm angegeben:
die Eingangs- und Ausgangsdynamik interaktiver Geräte Platz in 7.19.3 wie angegeben nehmen soll. Die Absicht von diese Anforderungen ist, dass ungepufferte oder Linie gepufferte Ausgabe so bald wie möglich erscheinen, um sicherzustellen, dass die Aufforderung Nachrichten tatsächlich vor einem Programm angezeigt werden, das auf Eingabe wartet.
(ISO/IEC 9899: TC2 Ausschussentwurf - 6. Mai 2005, Seite 14).
Es scheint also, dass es keine Garantie gibt, aber es wird wahrscheinlich in den meisten Implementierungen sowieso funktionieren. (Berühmte letzte Worte ...)
Der Querverweis auf 7.19.3 (7.21.3 in C11) ist ebenfalls nützlich, da hier erwähnt wird, welche Eingabeoperationen Spülen verursachen sollen. Diese werden unter https://stackoverflow.com/a/39536803/8586227 erläutert. –