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

时间:2009-10-06 23:26:17

标签: c printf

有没有人知道为什么我会在延迟之前放一个printf,直到延迟完成才能打印出消息?

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)。校正

5 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:9)

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

尝试printf(“hi world \ n”);

答案 2 :(得分:7)

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

  • 输出\n个字符
  • 致电fflush(stdout)

在调用delay()之前执行其中一项操作,您应该看到输出。

答案 3 :(得分:0)

当您调用printf时,除非确实需要,否则不要打印任何内容:直到缓冲区满,或者添加新行。或者你明确地冲洗它。

所以,你可以做到

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

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

答案 4 :(得分:-1)

从技术上说,甚至不应该编译。在delay("sleep 3")来电中,您尝试将const char *转换为float。它应该是:

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

delay(3);