小编use*_*289的帖子

在执行 scanf 之前 printf 如何被刷新?

我最近阅读了很多关于标准输出缓冲的内容。我知道它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在我的程序上运行,我的程序完全具有我上面提到的行为,它肯定是缓冲的。

c linux printf scanf buffering

3
推荐指数
1
解决办法
94
查看次数

标签 统计

buffering ×1

c ×1

linux ×1

printf ×1

scanf ×1