2012-08-26 12 views
8

Mögliche Duplizieren:
Does reading from stdin flush stdout?stdout und stdin Beziehungen

C++ Standard garantiert, dass alle in dem Puffer enthaltenen Daten werden vor dem nächsten Aufruf gedruckt werden, um std :: cin. Wie folgt aus:

#include <iostream> 

void bar() 
{ 
    int x; 
    std::cout << "Enter an integer: "; /* 1 */ 
    std::cin >> x; /* 2 */ 
} 

Aus diesem Grund:

ISO/IEC 14882: 2011

27.4.2 Narrow Stream-Objekte [narrow.stream.objects]

2 Nachdem das Objekt cin initialisiert wurde, gibt cin.tie() & cout zurück. Sein Zustand ist ansonsten der gleiche wie für basic_ios :: init (27.5.5.2) erforderlich.

27.4.3 Weitstromobjekte [wide.stream.objects]

2 Nachdem das Objekt WCIN initialisiert wird, wcin.tie() gibt & wcout. Der Status ist ansonsten der gleiche wie für basic_ios :: init (27.5.5.2).

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

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

+0

Wenn Ihre Frage zu C (und nicht über die Verwendung von stdio in C++), markieren Sie es bitte mit C und C++ nicht. – Mat

+2

Ich habe Tag C hinzugefügt, aber diese Frage bezieht sich auf C- und C++ IO-Vergleich, also möchte ich auch C++ Tag behalten. – FrozenHeart

+0

Oh, es ist schon eine Weile her, dass eine Frage hier mein Interesse geweckt hat. Ich hatte nie wirklich auf "Krawatte" geachtet, ich werde das sehen :) –

Antwort

3

Ich kannte die Cin-Cout-Beziehung in C++ nicht, danke. In C kenne 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.

Verwandte Themen