2016-07-18 8 views
-1

dieser feinen Code Arbeit:sleep() in unendlichen while-Schleife nicht Wert-Druck, wenn nicht beendet mit n

int main() 
{ 
while(1){ 

printf("hi\n"); 
sleep(1); 
} 

return 0; 
} 

Ausgang: hallo hallo hallo ...

aber wenn wir entferne '\ n' es wird nichts gedruckt?

int main() 
{ 
while(1){ 

printf("hi"); 
sleep(1); 
} 

return 0; 
} 

Ausgang: NO OUTPUT

Plz jemand geben explaination dieses Verhalten :)

+2

prüfen dies: http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline -ist-im-Format-strin – babon

Antwort

1

stdout wenn standardmäßig gepuffert, so dass es spülen Sie vollständig, dass die internen Puffer aus \n oder füllen sollte. Wenn ein solches Verhalten unerwünscht ist, können Sie es manuell mit fflush(stdout) leeren oder die Pufferung mit setbuffer(stdout, NULL, 0) deaktivieren.

0

Der Grund, warum Sie nichts gedruckt sehen, liegt daran, dass die Ausgabe gepuffert ist.

Der Grund, warum Sie beim Suffix \ n Ausdrucke sehen, ist, dass auf einigen Systemen ein Zeilenvorschub den Puffer spült. Sie können stdout manuell wie so bündig:

int main() 
{ 
    while(1) 
    { 
     printf("hi"); 
     fflush(stdout); 
     sleep(1); 
    } 
return 0; 
}