【问题标题】:printf without \n does not display text when placed before while(1) [duplicate]没有 \n 的 printf 在 while(1) 之前不显示文本 [重复]
【发布时间】:2011-11-15 02:16:09
【问题描述】:

可能重复:
Why does printf not flush after the call unless a newline is in the format string? (in C)

我在做一个网络项目时遇到了这个问题。我能够缩小问题范围并像这样重现它:

如果您运行此代码,它不会在屏幕上显示文本。虽然如果您将 \n 放在文本的末尾或在 printf 语句之后使用 fflush() ,它会显示文本。

int main(){
printf("started") ;
while(1){
}
}

谁能解释一下这种行为?

【问题讨论】:

标签: c printf


【解决方案1】:

没有\n,输出就不会刷新到屏幕上。

printf 之后添加fflush(stdout);,您应该会看到输出。

【讨论】:

  • 原因是stdout行缓冲。解决方案是打印"\n" 或使用fflush 自行刷新缓冲区。
  • 是的。很好的说明。
  • 正是..但我想知道在这种情况下它没有被刷新到屏幕上的原因是什么?和while循环有关系吗?
  • @Aaveg Mittal,它没有被刷新,因为底层流(stdout)是基于行缓冲的。这意味着它只是在行完成之前不会刷新。它实际上与 while 循环没有任何关系,因为 while 循环会阻止任何换行符(或流的关闭)发生。
  • 那么编译器是否会注意到无限循环并使标准输出刷新?您使用的是哪个编译器?我已经尝试过使用 -O3 编译 Gcc 并且输出永远不会刷新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多