2015-12-14 51 views
1
int main() 
{ 
    printf("Whats up"); 
    sleep(3); 
    printf("StackOverflow? All having a nice day? "); 
} 

爲什麼輸出3秒後「Whats up Stack ..」而不是第一個「Whats up」然後3秒後剩下的?睡眠命令執行不是我預期的

回答

8

這是因爲stdout通常是行緩衝。所以你的C庫緩衝輸出。您可以通過在printf()中使用\n或致電fflush(stdout)來清除此問題。

printf("Whats up\n"); 

fflush(stdout); // call after the printf 

您也可以關閉緩衝與setbuf()

setbuf(stdout, 0); 
+1

一個快速的注意,不直接相關的有機磷農藥的問題,但仍然具有現實意義。如果你在linux上使用換行符來刷新緩衝區,將只能在終端上運行,並且不能在文件重定向上工作 – JackVanier