繁体   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