2013-10-09 10 views
6

Wenn ich das unten Programm ausführen, bekomme ich keine Ausgabe.ungewöhnliches Verhalten mit printf mit unendlich While-Schleife

#include <stdio.h> 

int main() 
{ 
    printf("hello"); 
    while(1) 
    { 

    } 
    return 0; 
} 

während, wenn i der printf Befehl bearbeiten, um ein ‚\ n‘ Zeichen an das Ende der Zeichenfolge hinzuzufügen, dann ist die erwartete Ausgabe kommt. Was passiert im ersten Code? Ich kann es einfach nicht verstehen.

+0

Call 'fflush (stdout)' BTW Sie haben Endlosschleife. –

+3

Ausgang ist gepuffert. Sie benötigen entweder ein '\ n' am Ende des Strings, um es auszudrucken, oder' fflush (stdout) 'nach Ihrem' printf', wie es @GrijeshChauhan vorgeschlagen hat. Es gibt andere Operationen, die den Ausgabepuffer ebenfalls spülen, wie zum Beispiel eine Eingabefunktion ('getchar' oder' scanf'), aber es ist unklar von Ihrem Code-Snippet, was Ihre Schleife macht. – lurker

+0

mögliches Duplikat von [Warum führt das Programm die finale printf-Anweisung nicht aus?] (Http://stackoverflow.com/questions/11277796/why-does-program-not-execute-final-printf-statement) – lurker

Antwort

10

Dies liegt daran, stdout Linie gepuffert ist, also das Ausgangssignal nicht mit dem Gerät (das Endgerät), bis eine volle Linie gesammelt wurde geschrieben .

Sie können fflush(stdout); aufrufen, um einen Flush des Puffers zum Terminal zu erzwingen. Versuchen Sie nicht zu spülen stdin übrigens, das ist nicht erlaubt.

+0

ok, aber warum funktioniert der Code ohne Endlosschleife und mit demselben Ausdruck wie oben? – DesirePRG

+0

+1 für die Anweisung, dies nicht mit stdin zu machen – fayyazkl

+3

Wenn das Programm kurz danach beendet wird, würde das Betriebssystem den Ausgabepuffer definitiv leeren, im Gegensatz zu keiner Flush-Anforderung und das Programm wird fortgesetzt. – fayyazkl

2

versuchen

printf("hello\n"); 

oder

printf("hello"); 
fflush(stdout) 
+0

Sie sollten das angeben 'fflush (stdout)' tritt direkt nach dem 'printf' auf. – lurker

+0

@ mbratch Wahr. Ich habe bearbeitet, danke. –

0

Sie sollten einen Zeilenumbruch am Ende der Ausgabe drucken. Andernfalls wird ein undefiniertes Verhalten (zumindest potentiell nicht definiert) aufgerufen.

+1

Was meinen Sie mit "(potenziell) undefiniertem Verhalten aufrufen"? –

0

Verwenden printf("hello\n");

Für weitere Informationen Antworten auf this question sehen.