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

C语言尝试5秒后覆写同一行时printf初始输出不显示问题

问题根因

C语言的标准输出流stdout默认采用行缓冲机制:调用printf输出的内容不会立刻显示到屏幕上,而是先暂存在内存的输出缓冲区中,只有满足以下任意条件时,缓冲区的内容才会真正输出到终端:

  • 缓冲区被填满
  • 输出内容末尾包含换行符\n
  • 程序正常退出时自动刷新所有缓冲区
  • 手动调用fflush(stdout)强制刷新缓冲区

你的代码中,输出随机数的printf没有带换行符,输出内容会停留在缓冲区中,随后程序进入5秒的空循环阻塞阶段,期间缓冲区一直没有触发刷新条件,所以屏幕上看不到任何随机数。等5秒循环结束后,printf("\rHello")中的\r是回车符,会将光标移动到当前行的开头,新输出的Hello会直接覆盖缓冲区中还未输出的随机数内容,等到程序退出刷新缓冲区时,最终只会显示Hello。

如果你注释掉延迟循环和后续的printf("\rHello"),输出随机数后程序会直接退出,触发自动刷新缓冲区的逻辑,就能正常看到随机数。

解决方法

在输出随机数的循环结束后,手动调用fflush(stdout)强制刷新标准输出缓冲区即可,修改后的代码片段如下:

for (unsigned int i = 1; i <= digits; ++i)
    printf("%u ", rand() % 10);
fflush(stdout); // 强制将缓冲区内容输出到终端

添加这行后,随机数会立刻显示在屏幕上,后续5秒的等待周期内都可以看到这两个随机数,直到5秒后\rHello输出将内容覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:21:02