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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:03