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

C语言printf无法打印字符数组,求助实现补0三位递增数输出

问题分析与修复方案

核心问题

  • 数字转字符逻辑错误:你直接将整数数字强制转换为char,比如数字0会被转为ASCII码为0的空字符(不可见),而非字符'0'。正确的转换方式是给数字加上'0'的ASCII值,这样整数0-9才能对应到字符'0'-'9'。
  • 外层循环变量被意外篡改:内层循环中直接对i执行i /= 10操作,这会破坏外层循环的计数器,导致循环迭代逻辑完全混乱。必须使用临时变量保存当前i的值,再对临时变量进行数字拆解操作。

修正后的代码

#include <stdio.h>
#include <cs50.h>

int main(void)
{
    char s[4];
    s[3] = '\0';
    int nums[3] = {0, 0, 0};

    for (int i = 92; i < 110; i++)
    {
        // 用临时变量保存当前i,避免修改外层循环计数器
        int temp = i;
        // 拆解数字到nums数组
        for (int j = 0; j < 3; j++)
        {
            nums[2 - j] = temp % 10;
            temp /= 10;
        }

        // 转换为对应字符
        for (int k = 0; k < 3;  k++)
        {
            s[k] = nums[k] + '0';
        }

        printf("%s\n", s);
    }
}

修正后的代码会输出从092到109的三位数字,高位自动补0,完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:10:35