【问题标题】:Why do I need "\n" in c, when using the sleep function? [duplicate]为什么我在使用睡眠功能时需要在 c 中使用“\n”? [复制]
【发布时间】:2021-12-13 15:10:01
【问题描述】:

我的代码:

#include <stdio.h>
#include <unistd.h>

int main(){
    printf("I sleep\n");
    sleep(3);
    printf("\033[H\033[J");
    return 0;
}

如果我不在 printf 函数中写“\n”,则不会显示“I sleep”,直到 sleep(3) 完成。

谁能解释一下?谢谢!

【问题讨论】:

  • 这是因为stdout(通常)是行缓冲的。尝试 fprintfing 到 stderr 而不使用 '\n',它应该可以正常工作。
  • printf("I sleep"); fflush(stdout); 可能是一个选项
  • 当然我们必须有一些好的副本?不过我找不到。
  • @AdrianMole 看起来不错。

标签: c printf sleep unistd.h


【解决方案1】:

标准输出流在不输出到文件或设备时,在大多数类 UNIX 系统上默认为行缓冲。

这意味着在遇到换行符之前通常不会实际打印发送到那里的文本。

【讨论】:

  • 谢谢老哥,我明白了!
  • "默认行缓冲。" --> 嗯,我没有看到任何 C 规范这么说。而是常见的做法。
猜你喜欢
  • 2021-04-12
  • 2021-12-27
  • 2011-03-23
  • 2021-02-13
  • 2011-04-08
  • 2022-11-04
  • 1970-01-01
  • 2013-02-06
相关资源
最近更新 更多