You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言代码中printf先执行却在scanf后输出的原因是什么?

C语言printf先执行却晚于scanf输出的原因

这个现象和C标准库的行缓冲机制有关,和CPU执行顺序、编译器本身没有关系。

Linux环境下默认对标准输出(stdout)启用行缓冲策略,规则是:缓冲区的内容只有满足以下三个条件之一时才会真正输出到终端:

  • 缓冲区被填满
  • 遇到换行符\n
  • 执行输入类操作前主动刷新缓冲区

你写的printf("write down any whole number:");末尾没有加换行符\n,内容会先暂存在输出缓冲区里,不会立刻打印到终端。执行scanf的时候,标准库会先刷新输出缓冲区的内容,所以你才会看到先弹出printf的内容,再等待输入,调试时感知到的就是printf的输出比实际执行晚。

解决方法

你可以任选以下一种方式让printf的内容立刻输出:

  1. 在printf字符串末尾加换行符:
printf("write down any whole number:\n");
  1. 调用fflush手动刷新标准输出缓冲区:
printf("write down any whole number:");
fflush(stdout);
  1. 直接关闭标准输出的缓冲机制:
setbuf(stdout, NULL);

内容的提问来源于stack exchange,提问作者user14479570

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:48:03