C语言Q2编程题:整型数组转字符串反转 sprintf输出随机数问题求助
代码错误原因及修复方案
核心错误点
- 循环逻辑顺序错误:循环内先执行
i++再读取arr[i],该位置未初始化,存储内存随机值,导致输出乱码 - 逻辑冗余:不需要将整数转字符串反转再转回整数,直接对原整数取模即可获得从右到左的各位数字
- 不符合题目要求:未将每一位存储到
char类型的digit变量中,且digit数组被反复覆盖,最终只能输出最后一位内容 - 缺少整除判断逻辑:未实现题目要求的判断整数是否能被9整除的功能
修复后完整代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> // 逐位从右到左输出数字,符合Q2要求用char类型存储每一位 int reverse(int n) { int temp = n; while (temp != 0) { int display = temp % 10; char digit = display + '0'; // 数值转char类型,符合Q2要求 printf("%c\n", digit); temp = temp / 10; } return 0; } // 保留原有getsum函数,用于计算各位和及整除判断 int getsum(int n) { int sum = 0; while (n != 0) { sum = sum + n % 10; n = n / 10; } return sum; } int main() { int n; printf("input n: "); scanf("%d", &n); printf("从右到左逐位输出:\n"); reverse(n); int sum = getsum(n); printf("各位数字之和:%d\n", sum); if (sum % 9 == 0) { printf("%d 可以被9整除\n", n); } else { printf("%d 不可以被9整除\n", n); } return 0; }
修改说明
- 简化
reverse函数逻辑:直接对原整数取模获得最右侧数位,转成char类型的digit变量,完全符合Q2的要求 - 修复数组越界、未初始化问题:删除了冗余的数组存储逻辑,避免随机值输出
- 新增整除判断逻辑:调用
getsum的返回值判断是否能被9整除,满足Q1的要求 - 保留了原有
getsum函数,符合题目的兼容性要求
内容的提问来源于stack exchange,提问作者newb
相关产品推荐
相关产品推荐

