在延迟之前的printf在C中不起作用
有谁知道为什么如果我在延迟之前放一个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)。 更正
在输出’\ n’字符之前,标准输出不会刷新。
试试printf(“hi world \ n”);
printf缓冲它的输出,直到输出换行符。
添加fflush (标准输出); 按需刷新缓冲区。
通常,标准输出会被缓冲,直到您:
- 输出
\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);