Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
延迟前的printf不';我不能在C工作_C_Printf - Fatal编程技术网

延迟前的printf不';我不能在C工作

延迟前的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(&current); }while(difftime(current,start) < sec); } int main (void

有人知道为什么我在延迟之前放置printf,它会等到延迟完成后再打印de消息吗

使用sleep()编码1:

具有自我实现延迟的代码2:

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);    
}
它等待睡眠总数,然后同时打印消息

为什么会发生这种情况


更新:当我调用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);