c - 为什么 printf 在无限循环之前不起作用?

标签 c loops io

我正在尝试编写一个包含无限循环的小程序来等待用户的信号输入。我想在开始无限循环之前打印出一条关于当前工作目录的消息。该消息独立运行,但是当我将无限循环放入代码中时,消息不会打印出来(但终端会无限循环)。代码是:

#include <stdio.h>

int MAX_PATH_LENGTH = 100;

main () {
  char path[MAX_PATH_LENGTH];
  getcwd(path, MAX_PATH_LENGTH);
  printf("%s> ", path);
  while(1) { }
}

如果我取出 while(1) { } 我得到输出:

ad@ubuntu:~/Documents$ ./a.out
/home/ad/Documents>

这是为什么?谢谢!

最佳答案

当您调用 printf 时,输出不会立即打印出来;相反,它会进入幕后某处的缓冲区。为了让它真正显示在屏幕上,您必须调用 fflush 或类似的东西来刷新流。每当您打印换行符*和程序终止时,都会自动为您完成;当您删除无限循环时,正是第二种情况导致字符串出现。但是有了循环,程序永远不会结束,所以输出永远不会刷新到屏幕上,你什么也看不到。


*正如我刚刚通过阅读评论中链接的问题 itsmatt 发现的那样,换行刷新仅在程序打印到终端时发生,而不一定发生在打印到文件时。

关于c - 为什么 printf 在无限循环之前不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508630/

相关文章:

c - memchr() 是如何工作的?

objective-c - 具有 Swift 结构的 C API - 作为 inout 参数的不可变值

c - 如何在字符串数组中查找字符串的总长度

php - 使用PHP为记录集中的每3条记录输出特定代码

java - 如何检索 BufferedReader 的位置?

c - Arduino超声波距离传感器与无源蜂鸣器实现不同的音调

algorithm - 嵌套while循环的时间复杂度

java - 在Java中使用for循环时如何实现return语句?

C++文件输入输出:cannot input

linux - Debian Wheezy 默认内核 (3.2.0-4-amd64) 高平均负载