延迟前的printf不';我不能在C工作
有人知道为什么我在延迟之前放置printf,它会等到延迟完成后再打印de消息吗 使用sleep()编码1: 具有自我实现延迟的代码2:延迟前的printf不';我不能在C工作,c,printf,C,Printf,有人知道为什么我在延迟之前放置printf,它会等到延迟完成后再打印de消息吗 使用sleep()编码1: 具有自我实现延迟的代码2: void delay(float sec) { time_t start; time_t current; time(&start); do{ time(¤t); }while(difftime(current,start) < sec); } int main (void
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);
}
它等待睡眠总数,然后同时打印消息
为什么会发生这种情况
更新:当我调用delay时,我写了delay(“sleep3”),我的意思是delay(3)。已更正在输出'\n'字符之前,标准输出不会刷新
尝试printf(“hi world\n”) printf缓冲其输出,直到输出换行符
添加一个(标准输出);按需刷新缓冲区。通常,标准输出会被缓冲,直到您:
- 输出一个
字符\n
- 调用
fflush(stdout)
在调用
delay()
之前执行以下操作之一,您应该会看到您的输出。当您调用printf时,直到真正需要时才打印任何内容:直到缓冲区填满或添加新行。或者显式地刷新它
所以,你可以选择
printf("Something\n");
delay();
或
从技术上讲,这甚至不应该编译。在
delay(“sleep 3”)
调用中,您试图将const char*
转换为float
。应该是:
void delay (float sec)
{
// ...
}
delay(3);
你说得对。你说得对(本和菲格布)。谢谢你的快速回答;)我不认为简单地添加一个\n就可以保证输出将被刷新。在这种情况下,我正好为你工作。最好像FigBug建议的那样使用fflush(),它会编译,但它会将指针视为浮点数,这可能会造成不好的结果。如果你充分增加编译器的警告,它将无法编译。@Chris是的,我想它甚至可以将指针转换为浮点,但正如你所说,这不是一件好事!不管怎样,编译器可能至少会抱怨我的意思是延迟(3)。类型错误;),我刚刚更新了问题。Thx for make me note注意,如果stdout是一个终端,写一个换行符通常只刷新输出;如果它被重定向到一个文件,编写一个换行符不会导致它刷新。此外,为了更好的延迟功能,考虑标准的POSIX <代码>睡眠()/代码>函数,在<代码> UNISST.H./COD>中声明。请提供一个例子,以便清楚何时何地放置<代码> FFLUSS命令。非常感谢。
printf("Something\n");
delay();
printf("Something");
fflush(stdout);
delay();
void delay (float sec)
{
// ...
}
delay(3);