Abschnitt 7.9.13/7
von c99
heißt es:Ist die Standardausgabe standardmäßig gepuffert, ungepuffert oder unbestimmt?
Bei Programmstart, sind drei Textströme vordefiniert und kann nicht müssen explizit geöffnet werden - die Standardeingabe (zum Lesen von herkömmlicher Eingabe), Standardausgabe (zum Schreiben von herkömmlichem Ausgang) und Standardfehler (zum Schreiben der Diagnoseausgabe).
Wie ursprünglich geöffnet, ist der Standardfehlerstrom nicht vollständig gepuffert; Standard-Input- und Standard-Output-Streams werden genau dann gepuffert, wenn der Stream so bestimmt werden kann, dass er sich nicht auf ein interaktives Gerät bezieht.
Das macht also Sinn. Wenn Sie Ihre Standardausgabe in eine Datei übertragen, möchten Sie, dass die Effizienz vollständig gepuffert ist.
Aber ich kann auf keine Erwähnung in der Norm festzustellen, ob der Ausgang Zeile gepuffert oder ungepuffert, wenn Sie nicht bestimmen das Gerät ist nicht interaktiv (dh normale Ausgabe an einen Terminal).
Der Grund frage ich einen Kommentar zu meine Antwort war here, daß ich eine fflush(stdout);
zwischen den beiden Aussagen einfügen:
printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }
, weil ich nicht die printf
mit einem Newline endet. Kann das jemand klären?
Sie können "stdout" nicht "vorübergehend" ungepuffert machen. 'setbuf' und' setvbuf' haben undefiniertes Verhalten, es sei denn, sie sind die erste Operation, die nach dem Öffnen der Datei ausgeführt wird. –
@R ..: Danke, du hast Recht. Ich habe das zur Antwort hinzugefügt. – schot
Gibt es beim Zeilenpufferung ein hohes Wasserzeichen, wo, wenn die Linie zu lang wird, wird es gespült? – CMCDragonkai