2014-01-29 121 views
0
#include <stdlib.h> 

int main() 
{ 
    printf("\nHello"); 
    sleep(5); 
    printf("\nLinux"); 
} 

在我的意料睡眠()的行为,它应该是这样的:睡眠()/在Linux/Windows的

PRINT Hello --- WAIT 5 SECS ---> PRINT Linux 

但实际上这将是这样的:

WAIT 5 SECS --> PRINT Hello --> PRINT Linux 

为什么?如何让我的程序成为第一个(如我的期望)?

为什么我的代码可以在Win32控制台上预期运行?

+1

缓冲...... – devnull

+0

@devnull OK,我编辑我的职务。我很好奇为什么我的代码可以在Win32控制台上预期运行? –

+1

因为控制台输出没有在Windows中缓存 – qwm

回答

4

您的流是行缓冲的,因为您不会以\n结束字符串,请使用fflush来刷新它。

程序更改为:

int main() 
{ 
    printf("\nHello"); 
    fflush(stdout); 
    sleep(5); 
    printf("\nLinux"); 
} 
+0

哇,它现在可以工作,但为什么我的代码可以在Win32控制台上预期运行?微软问题? –

+1

@KevinDongNaiJia如果流被完全缓冲,如果它是行缓冲的,它将在没有'fflush'的情况下工作,您将需要'fflush'。使用'fflush'在不同的配置上具有相同的行为。 – ouah

1

输出缓冲,不打印,直到换行。

尝试用:

printf("\nHello\n"); 
sleep(5); 
printf("Linux");