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; }
关键修正说明
- 保存原数字:用
temp变量替代num参与循环计算,避免原数字被覆盖 - 有效赋值数组:通过
temp % 10提取每一位数字,存入数组对应的索引位置 - 返回位数:函数返回数字的位数,主函数可以准确遍历数组元素
- 特殊情况处理:如果输入的
num是0,单独处理避免位数为0的问题
运行这段代码后,就能正确输出1 2 3 4 5(对应数字12345的各位)啦。
内容的提问来源于stack exchange,提问作者Prins
相关产品推荐
相关产品推荐

