有没有人知道为什么我会在延迟之前放一个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(¤t);
}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)。校正
答案 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);