sleep()不会正确延迟printf()输出

时间:2014-07-28 22:59:24

标签: c sleep

我遇到sleep()功能不起作用的问题。例如:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[]){

     printf("\nHello!");
     sleep(1);
     printf("\nBye!");
     sleep(1);

     return 0;
}

即便是这样的简单程序也行不通。它将睡2秒然后说“你好!再见!”并结束该计划。如果有人有任何想法,他们会很感激!

2 个答案:

答案 0 :(得分:3)

缓冲输出到stdout直到换行符。 [紧接在printf之前的换行符应该刷新,但是以下字符将被缓冲,直到强制换行或显式刷新为止{re:greg h}]

要刷新标准输出,请致电fflush( stdout )

int main(int argc, char* argv[]){

    printf("\nHello!");
    // flush stdout
    fflush( stdout );
    sleep(1);
    printf("\nBye!");
    // flush stdout
    fflush( stdout );
    sleep(1);

    return 0;
}

答案 1 :(得分:1)

默认情况下,在打印printf字符时,会刷新\n输出(实际发送到终端)。因此,您可以按如下方式使代码工作:

 printf("Hello!\n");
 sleep(1);
 printf("Bye!\n");
 sleep(1);

在这种情况下,我已将换行符\n移至您正在打印的字符串的 end ,而不是开头。