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

Xid*_*bix 5 c printf

有没有人知道为什么如果我在延迟之前放一个printf,它等到延迟完成才打印出de消息?

Code1 with sleep():

int main (void)
{
    printf ("hi world");
    system("sleep 3");    
}
Run Code Online (Sandbox Code Playgroud)

具有自实现延迟的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);    
}
Run Code Online (Sandbox Code Playgroud)

而如果:

printf ("hi world");
delay(3);    
printf ("hi world");
delay(3);    
Run Code Online (Sandbox Code Playgroud)

它等到睡眠总和,然后它同时打印消息

为什么会这样?

更新:当我呼叫延迟时,我写了延迟("睡眠3"),我的意思是延迟(3).更正

Rol*_*ien 20

printf缓冲它的输出,直到输出换行符.

添加fflush(标准输出); 按需刷新缓冲区.


Ben*_*Ben 10

在输出'\n'字符之前,标准输出不会刷新.

试试printf("hi world \n");


Gre*_*ill 8

通常,标准输出会被缓冲,直到您:

  • 输出一个\n字符
  • 呼叫 fflush(stdout)

在打电话之前做其中一件事delay(),你应该看到你的输出.

  • 请注意,如果stdout是终端,则写入换行符通常只会刷新输出; 如果它被重定向到文件,写一个换行符不会导致它刷新. (3认同)