我正在学习“C PRIMER PLUS”,有一个关于“OUTPUT FLUSHING”的话题。现在它说:
printf()
语句将输出发送到称为缓冲区的中间存储器。每隔一段时间,缓冲区中的材料就会被发送到屏幕上。何时将输出从缓冲区发送到屏幕的标准 C 规则很明确:
- 当缓冲区已满时发送。
- 当遇到换行符时。
- 当有即将到来的输入时。
(将输出从缓冲区发送到屏幕或文件称为刷新缓冲区。)
现在,验证上述说法。我写了这个简单的程序:
#include<stdio.h>
int main(int argc, char** argv) {
printf("Hello World");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因此, printf() 既不包含新行,也不包含一些即将发生的输入(例如 scanf() 语句或任何其他输入语句)。那么为什么它会在输出屏幕上打印内容。
让我们假设第一个条件验证为真。缓冲区已满(这根本不可能发生)。牢记这一点,我将 printf() 中的语句截断为
printf("Hi");
Run Code Online (Sandbox Code Playgroud)
它仍然在控制台上打印语句。
那么这里有什么交易,上述所有条件都是错误的,但我仍然在屏幕上看到输出。你能详细说明一下吗。看来我在理解这个概念时犯了一个错误。任何帮助都受到高度赞赏。
编辑:正如一个非常有用的评论所建议的那样,可能在程序结束后执行 exit() 函数会导致所有缓冲区刷新,从而导致控制台上的输出。但是如果我们在执行 exit() 之前按住屏幕。像这样,
#include<stdio.h>
int main(int argc, char** argv) {
printf("Hello World!");
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它仍然在控制台上输出。
c ×1