stdout und stdin Beziehungen [duplizieren]

8

C ++ Standard garantiert, dass alle im Puffer enthaltenen Daten vor dem nächsten Aufruf von std :: cin gedruckt werden. So:

%Vor%

Aus diesem Grund:

ISO / IEC 14882: 2011

  

27.4.2 Objekte mit schmalem Stream [eng.stream.objects]

     

2 Nachdem das Objekt cin initialisiert wurde, gibt cin.tie () & amp; cout zurück. Es ist   Der Status ist ansonsten der gleiche wie für basic_ios :: init   (27.5.5.2).

     

27.4.3 Wide Stream Objekte [wide.stream.objects]

     

2 Nachdem das Objekt wcin initialisiert wurde, gibt wcin.tie () & amp; wcout zurück.   Ihr Zustand ist ansonsten derselbe wie für erforderlich   basic_ios :: init (27.5.5.2).

Aber in C gibt es wirklich keine Garantien, dass alles, das im stdout Puffer enthalten ist, gedruckt wird, bevor irgendein Versuch, zu stdin?

%Vor%

Ich weiß, dass stdout linien gepuffert ist, aber ich möchte in solchen Situationen keinen '\ n' Charakter setzen. Ist die Verwendung von fflush / fclose / etc der einzig richtige Weg, die Ausgabe direkt vor der Eingabeanforderung in C zu erhalten?

    
FrozenHeart 26.08.2012, 12:09
quelle

2 Antworten

4

Nein, solche Garantien gibt es nicht. Ja, Sie können fflush () verwenden, um sicherzustellen, dass stdout gelöscht wird.

Diese Frage steht in engem Zusammenhang: Ist das Lesen von stdin flush stdout?

    
d99kris 26.08.2012, 14:30
quelle
3

Ich kannte die cin / cout-Beziehung in C ++ nicht, danke. In C weiß ich keine andere Möglichkeit, den Stdout-Puffer zu löschen. Ich verwende immer fflush , wenn ich sicher sein muss, dass die Ausgabe zu einem bestimmten Zeitpunkt gedruckt wurde.

    
phsym 26.08.2012 12:35
quelle

Tags und Links