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

A D*_*A D 5 c io loops

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

#include <stdio.h>

int MAX_PATH_LENGTH = 100;

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

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

ad@ubuntu:~/Documents$ ./a.out
/home/ad/Documents>
Run Code Online (Sandbox Code Playgroud)

为什么是这样?谢谢!

Dav*_*d Z 8

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


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