如何让C语言函数返回数组?修复数字转数组的代码问题
问题修复:将数字每一位存入数组并按顺序输出
先梳理你失效代码里的核心错误:
- 位数计算逻辑完全错误:
for(d=0; num<0;d++);条件是num<0,输入正数时循环直接终止,d保持0;而且循环后的分号让num /=10变成了单独执行,直接把原数字改成0,后续操作全错。 - 数组操作越界:
a[d]=store(num);和最后的printf("%d \n",a[d]);都用到了下标d,但数组的有效下标是0到d-1,这会访问非法内存,导致垃圾值输出。 - 递归函数存在未定义行为:当
num=0时,store函数没有返回值,调用它会产生不可预料的结果。 - 循环存储逻辑错误:循环里反复用同一个被修改后的
num调用store,无法依次获取每一位数字。
修复方案一:基于递归的实现
保留你原有的递归思路,调整逻辑来正确填充数组:
#include<stdio.h> // 递归函数:填充数组,返回当前填充的下标位置 int fillArray(int num, int arr[], int index) { if (num == 0) { return index; } // 先递归处理高位 index = fillArray(num / 10, arr, index); // 把当前位存入数组 arr[index++] = num % 10; return index; } int main() { int num, temp, digitCount = 0; printf("Enter number: "); scanf("%d", &num); // 处理num为0的特殊情况 if (num == 0) { printf("0\n"); return 0; } // 先计算数字的位数 temp = num; while (temp != 0) { digitCount++; temp /= 10; } // 创建对应长度的数组 int arr[digitCount]; // 调用递归函数填充数组 fillArray(num, arr, 0); // 按要求格式输出 for (int i = 0; i < digitCount; i++) { printf("%d", arr[i]); if (i != digitCount - 1) { printf(" "); } } printf("\n"); return 0; }
修复方案二:非递归实现(更直观)
如果不需要递归,用循环直接处理更简单:
#include<stdio.h> int main() { int num, temp, digitCount = 0; printf("Enter number: "); scanf("%d", &num); if (num == 0) { printf("0\n"); return 0; } // 计算位数 temp = num; while (temp != 0) { digitCount++; temp /= 10; } int arr[digitCount]; temp = num; // 从高位到低位填充数组 for (int i = digitCount - 1; i >= 0; i--) { arr[i] = temp % 10; temp /= 10; } // 输出结果 for (int i = 0; i < digitCount; i++) { printf("%d", arr[i]); if (i != digitCount - 1) { printf(" "); } } printf("\n"); return 0; }
测试示例
输入687544,输出:6 8 7 5 4 4
输入123,输出:1 2 3
内容的提问来源于stack exchange,提问作者Dorissss
相关产品推荐
相关产品推荐

