2014-11-22 108 views
-2

爲什麼我的程序不是printf?Printf in C with using sleep not working

先睡着了,然後寫道,但他應該這樣做反過來..程序

#include <stdio.h> 
#include <stdlib.h> 
#ifdef _WIN32 
#include <Windows.h> 
#else 
#include <unistd.h> 
#endif 

void sleepMilliSecond(long milliSecondInput) { 
#ifdef _WIN32 
    Sleep(milliSecondInput); // v milliSecondach 
#else 
    usleep(pollingDelay * 1000); //microsekundy -> milisekundy 
#endif 
} 



int main(int argc, char** argv) { 
    printf("start sleep");  
    sleepMilliSecond(1000); //sleep 1s 
    printf("stop sleep"); 
    return (EXIT_SUCCESS); 
} 

輸出是:睡覺,然後他開始寫休眠停止睡眠,爲什麼呢?

編輯: 工作的解決方案是:

printf("start sleep");  
fflush(stdout); 
sleepMilliSecond(10000); 
printf("stop sleep"); 
+0

適合我! – Rizier123 2014-11-22 12:44:41

+0

對於我來說不行,因爲他在睡眠時間間隔後寫入控制檯「START SLEEP」:( – tilefrae 2014-11-22 12:45:37

+3

'printf'被緩衝。在第一個'printf'後面嘗試'fflush(stdout)' – SleuthEye 2014-11-22 12:46:00

回答

4

printf是緩衝I/O。要強制緩衝區被寫入輸出,您可以這樣撥打fflush

printf("start sleep"); 
fflush(stdout); 
sleepMilliSecond(1000); //sleep 1s 
printf("stop sleep"); 
4

你不沖水「停止睡眠」和「啓動休眠」它仍然在緩衝區中。添加\ n到結尾:

printf(「start sleep \ n」);
printf(「stop sleep \ n」);

+0

@順磁牛角麪包不起作用fflush(stdout)幫助我。 – tilefrae 2014-11-22 12:53:04