簡體   English   中英

在延遲之前的printf在C中不起作用

[英]printf just before a delay doesn't work in C

有沒有人知道為什么如果我在延遲之前放一個printf,它等到延遲完成才打印出de消息?

Code1 with sleep():

int main (void)
{
    printf ("hi world");
    system("sleep 3");    
}

具有自實現延遲的Code2:

void delay(float sec)
{
    time_t start;
    time_t current;
    time(&start);
    do{
        time(&current);
    }while(difftime(current,start) < sec);
}
int main (void)
{
    printf ("hi world");
    delay(3);    
}

而如果:

printf ("hi world");
delay(3);    
printf ("hi world");
delay(3);    

它等到睡眠總和,然后它同時打印消息

為什么會這樣?

更新:當我呼叫延遲時,我寫了延遲(“睡眠3”),我的意思是延遲(3)。 更正

printf緩沖它的輸出,直到輸出換行符。

添加fflush (標准輸出); 按需刷新緩沖區。

在輸出'\\ n'字符之前,標准輸出不會刷新。

試試printf(“hi world \\ n”);

通常,標准輸出會被緩沖,直到您:

  • 輸出\\n字符
  • fflush(stdout)

在調用delay()之前執行其中一項操作,您應該看到輸出。

當你調用printf時,在真正需要之前你不會打印任何東西:直到緩沖區滿,或者你添加一個新行。 或者你明確地沖洗它。

所以,你可以做到

printf("Something\n");
delay();

要么

printf("Something");
fflush(stdout);
delay();

從技術上說,甚至不應該編譯。 delay("sleep 3")調用中,您嘗試將const char *轉換為float 它應該是:

void delay (float sec)
{
    // ...
}

delay(3);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM