2014-01-29 90 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");