【问题标题】:sleep() is not delaying printf() output correctly [duplicate]sleep() 没有正确延迟 printf() 输出[重复]
【发布时间】:2014-07-28 22:59:23
【问题描述】:

我遇到了sleep() 功能无法正常工作的问题。例如:

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

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

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

     return 0;
}

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

【问题讨论】:

标签: c sleep


【解决方案1】:

到 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;
}

【讨论】:

  • 你能举个例子吗?我 14 岁,刚刚学习语言,如果我有点慢,抱歉
  • printf 语句确实包含换行符,只是在一个不寻常的地方...
  • @Greg Hewgill printf 不包含换行符。你必须输入一个转义字符,但没有它它不会自动刷新。
  • @James:不,真的,问题代码中输出的 start 处有换行符。
  • 哈哈,碰一下...换行符会强制刷新,但会缓冲以下字符。我更新了我的答案以包含一个例子,我会稍微改变我的措辞
【解决方案2】:

默认情况下,printf 输出在打印\n 字符时被刷新(实际上发送到终端)。所以你可以让你的代码按如下方式工作:

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

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

【讨论】:

  • 好的,非常感谢您解决了我的问题!
猜你喜欢
  • 2011-05-11
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 2020-05-06
  • 2022-01-10
  • 2020-10-05
  • 2020-10-26
  • 1970-01-01
相关资源
最近更新 更多