C++ / cout in einer Schleife gibt nicht sofort aus...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
oli_f
Beiträge: 272
Registriert: 24.10.2003 12:27:05

C++ / cout in einer Schleife gibt nicht sofort aus...

Beitrag von oli_f » 06.01.2005 21:43:13

In einem C++ Programm habe ich folgenden Code in main()

Code: Alles auswählen

        
for ( int x = 0; x < size; x++ )
{
        for ( int y = 0; y < size; y++ )
              cout  << board.run( x, y );
        cout << endl;
}
das funktioniert eigentlich bestens nur leider werden die einzelnen Resultate von board.run() nur Zeilenweise ausgegeben also erst beim endl.

das stört mich aber da die einzelnen schritte sehr lange dauern!

kann ich das irgendwie ändern, dass die Werte gleich angezeigt werden?
error - divided by 0

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 06.01.2005 21:58:17

du kannst einmal versuchen zwischendurch ein "cout.flush();" aufzurufen, ich befürchte aber daß das auch nichts helfen wird.

[edit]
doch, das sollte helfen
[/edit]

oli_f
Beiträge: 272
Registriert: 24.10.2003 12:27:05

Beitrag von oli_f » 06.01.2005 22:15:08

wunderbar! es geht, merci.

was macht dieser befehl genau? gibt es da noch einen buffer für die ausgabe und ist das eine eigenart unter linux denn unter win hatte ich nie solche probleme (denke ich).
error - divided by 0

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 06.01.2005 22:22:36

Ja durch flush wird der Buffer geleert (wird auch indirekt von endl aufgerufen). Auch unter Windows wird nicht jedes Zeichen sofort rausgeschrieben, sondern zuerst gebuffert.

Benutzeravatar
bollin
Beiträge: 482
Registriert: 01.11.2003 23:31:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von bollin » 07.01.2005 07:03:29

gms hat geschrieben:"cout.flush();"
Oder

Code: Alles auswählen

std::cout << std::flush;
, wenn man die merkwürdige Syntax mag.

Viele Grüße,
Torsten

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 07.01.2005 19:17:22

gms hat geschrieben:Ja durch flush wird der Buffer geleert (wird auch indirekt von endl aufgerufen). Auch unter Windows wird nicht jedes Zeichen sofort rausgeschrieben, sondern zuerst gebuffert.
Afaik wird das unter Windows eben gerade sofort geschrieben. So habe ich mir zumindest damals meine Probleme erklärt (ging um Java, ist ne lange Geschichte ;)).

Kann natürlich sein das ich da nicht recht habe, würde aber mein Weltbild arg durcheinanderbringen *g*

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 07.01.2005 21:05:45

peschmae hat geschrieben:Afaik wird das unter Windows eben gerade sofort geschrieben. So habe ich mir zumindest damals meine Probleme erklärt (ging um Java, ist ne lange Geschichte ;)).
Zu Java kann ich nicht sehr viel sagen, hier fehlt mir die langjährige Erfahrung. (Mein erstes Java Programm habe ich vor ca. einem Jahr geschreiben.) Die (C++) STL verwende ich jetzt aber schon beinahe 10 Jahre (vorallem unter Windows). Ein solcher Bug wäre mir bestimmt aufgefallen.

Antworten