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

树莓派C语言调用printf每秒打印数字却每10秒批量输出问题咨询

问题原因

C语言在Linux环境下(包含树莓派的Linux发行版)的标准输出stdout默认采用行缓冲机制,满足以下任意条件才会将缓冲区的内容真正输出到终端:

  • 缓冲区被写满
  • 遇到换行符\n
  • 程序结束退出时自动刷新
  • 代码主动调用缓冲刷新函数

你的代码中,每次循环执行printf("%d ", i);输出的内容末尾没有换行符,只有当i%10 == 1时才会输出\n触发缓冲刷新,因此每10次循环(间隔10秒)才会一次性输出一整行的10个数字,和你预期的逐秒输出不符。

解决方案

两种常用修复方案,任选一种即可:

  • 每次打印后主动刷新标准输出缓冲区:在printf("%d ", i);后新增一行fflush(stdout);即可,该函数已包含在stdio.h中无需额外引入头文件。
  • 程序启动时直接关闭标准输出的缓冲机制:在main函数最开头新增一行setbuf(stdout, NULL);,之后所有输出都会直接写入终端,无需等待缓冲条件触发。

修改后参考代码

#include <stdio.h>
#include <wiringPi.h>
#include <softPwm.h>

int main(void)
{
    wiringPiSetupGpio();
    
    for(int i = 0 ; i <50; i++)
    {   
        if ( i%10 == 1)
        {
            printf("\n");
        }
    
        printf("%d  ", i);
        fflush(stdout); // 新增缓冲刷新逻辑
        delay(1000);
    }
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:05