Frage

Wieder einmal mein Lehrer war nicht in der Lage, meine Frage zu beantworten. Ich wusste, wer in der Lage sein zu ...

So habe ich nie gelernt C. In C ++ wirklich, ich würde verwenden offensichtlich eine cout-Anweisung die ganze Zeit. In einer aktuellen Zuordnung, sagte mein Lehrer uns, um sicherzustellen, setzt

setbuf( stdout , NULL );

an der Spitze des main (), um eine ungepufferten Ausgabe zu erhalten, so dass wir die Ausgabe richtig zu sehen.

Meine Frage ist: wird diese Aussage eine cout-Anweisung beeinflussen, oder einfach nur eine printf () Aussage, dass ich anrufen?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

In der Standardeinstellung iostreams und stdio synchronisiert sind. Referenz.

Das bedeutet nicht, dass manuell die stdio Pufferung Einstellung eine gute Idee ist, aber! Vielleicht möchten Sie std::endl oder std::flush nutzen (von <ostream>), die Ihnen helfen können. z. B.

std::cout << "Hello, world!" << std::endl;

oder

std::cout << "Hello, world!\n" << std::flush;

Beide tun das Gleiche. ( std::endl = Druck endline, dann spülen.)

Andere Tipps

standardmäßig, wenn stdout cout oder an eine Konsole druckt, wird die Ausgangsleitung gepuffert. Dies bedeutet, dass jede Neue-Zeile, die gedruckt wird, wird die Ausgabe spülen. Sie können explizit flush () aufrufen, wenn Sie das Verhalten außer Kraft setzen wollen, nur für den Fall sagen, dass die Ausgabe in eine Datei umgeleitet werden wird, und Sie wollen tail -f verwenden und müssen bestimmte Ausgänge in Echtzeit.

Als Chris sagte: sync_with_stdio sollte die ungepufferte stdout mit einer Krawatte ungepufferte cout (Standard), aber wenn alles, was Sie tun cout ist, daß anstelle setbuf auf stdout zu verwenden, eine bessere Option ist pubsetbuf auf den Zeiger von binden .

Normalerweise, wenn es wichtig ist, die Ausgabe sofort zu sehen, wir reden über komplexe hochzuverlässige Finanz Routine, dass eine Transaktion den ganzen Weg auf die Festplatte anmelden müssen, bevor es tatsächlich zu Kontrahenten zu senden. Oder (viel häufiger Fall) wollen wir Debug-Nachrichten sehen, auch wenn das Programm abstürzt.

Da Sie studieren, ich nehme an, Sie mit dem zweiten Fall zu tun hat. In diesem Fall mein Rat wäre stderr zu verwenden, anstatt stdout. Es ist ungepufferte standardmäßig aktiviert und Sie können es von stdout getrennt umleiten, die Ausgabe an einem Ort und Ihre Protokollierung in einer anderen setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top