2015-12-14 123 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