我最近阅读了很多关于标准输出缓冲的内容。我知道它printf是缓冲的,但到目前为止我认为它的缓冲区只有在新行被读入缓冲区或被fflush(stdout)调用或调用的进程printf正常退出时才会被刷新。
我写了这个程序,它调用 printf 之前没有换行scanf。当我用谷歌搜索时,我发现很多人说他们不明白为什么在 printf 之前执行 scanf。由于我现在了解标准输出缓冲的概念,这对我来说很有意义。
但是,就我而言,缓冲区在我运行 scanf 之前被刷新。这样做确实有意义,因为用户可能希望在任何 scanf 之前执行 printf,但它是如何发生的?究竟什么是刷新标准输出?是scanf吗?
int main(void) {
char things;
printf("Hello ");
scanf("%c", &things);
}
Run Code Online (Sandbox Code Playgroud)
(我正在运行 Arch Linux)
编辑:由于一些评论说我的系统的标准输出是无缓冲的,我只想添加它而不scanf在我的程序上运行,我的程序完全具有我上面提到的行为,它肯定是缓冲的。