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

C语言:使用fun函数将整数转为数组时出现随机值问题求助

解决整数转数组后输出随机值的问题

我来帮你分析下问题出在哪,以及怎么修复~你的核心问题是函数只算了数字的位数,但完全没把整数的各位存入数组,再加上数组元素没被初始化,打印时自然会输出内存里的随机值。

原代码的问题点

  • 循环里直接修改了num的值,原数字被覆盖后,后续根本没法提取每一位数字
  • array[count];这行代码完全无效,它只是访问数组的第count个元素,没有做任何赋值操作
  • 数组元素默认是未初始化的随机内存值,所以打印时会出现乱数

修正后的代码实现

#include <stdio.h>

int fun(int num, int* array) {
    // 先保存原数字,避免循环修改后丢失
    int temp = num;
    int count = 0;

    // 第一步:计算数字的位数
    while (temp > 0) {
        temp /= 10;
        count++;
    }

    // 处理num为0的特殊情况
    if (count == 0) {
        array[0] = 0;
        return 1;
    }

    // 恢复原数字,准备提取每一位
    temp = num;
    // 第二步:把每一位数字存入数组(高位到低位顺序)
    for (int i = count - 1; i >= 0; i--) {
        array[i] = temp % 10; // 取当前最后一位
        temp /= 10; // 去掉最后一位
    }

    return count; // 返回数字的位数,方便后续遍历数组
}

int main() {
    int num = 12345;
    int array[10]; // 假设数字不超过10位,可根据需求调整大小
    int length = fun(num, array);

    printf("转换后的数组:");
    for (int i = 0; i < length; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    return 0;
}

关键修正说明

  1. 保存原数字:用temp变量替代num参与循环计算,避免原数字被覆盖
  2. 有效赋值数组:通过temp % 10提取每一位数字,存入数组对应的索引位置
  3. 返回位数:函数返回数字的位数,主函数可以准确遍历数组元素
  4. 特殊情况处理:如果输入的num是0,单独处理避免位数为0的问题

运行这段代码后,就能正确输出1 2 3 4 5(对应数字12345的各位)啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:16:12