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

C语言中如何使用数组实现用户输入数字的各位反转?

问题核心原因

  • 你在统计数字位数的do-while循环中直接修改了原始输入的变量n,循环结束后n的值已经变为0,后续执行a[i] = n%10时每次取余结果都是0,自然输出全0。
  • 原统计位数的逻辑没有兼容负数的场景,和你之前非数组实现的兼容性不一致。

代码修改方案

先备份原始输入的数字,统计位数和提取数位都用备份变量操作,避免修改原始值:

#include<stdio.h>
int main(){
    int n, count = 0;
    printf("Enter an integer: ");
    scanf("%d",&n);
    // 备份原始输入的数字,避免统计位数时修改原数据
    int temp = n;
    
    // 统计位数,兼容负数场景
    do{
        temp = temp / 10;
        count++;
    }while(temp != 0);
    
    int i, a[100];
    // 重置temp为原始输入值,用来提取各位存入数组
    temp = n;
    for(i = 0; i < count; i++){
        a[i] = temp % 10;
        // 处理负数取余的负号,比如-123%10结果为-3,转换为正数
        if(a[i] < 0) a[i] = -a[i];
        temp = temp / 10;
    }
    
    // 输入为负数时先打印负号
    if(n < 0) printf("-");
    for(i = 0; i < count; i++){
        printf("%d",a[i]);
    }
    return 0;
}

相关概念梳理

  1. 变量操作的副作用:如果原始值后续还要复用,操作前必须做备份,不能直接修改原始变量,这是C语言开发中非常常见的低级错误。你本次的问题核心就是统计位数时直接修改了输入的n,导致后续提取数位时拿不到原始值。
  2. 数组存数位的逻辑:每次取当前数的最后一位(%10)存入数组,再把当前数除以10去掉最后一位,循环count次就能按反转顺序把所有数位存入数组,直接遍历数组即可得到反转后的数字。
  3. 负数处理注意点:C语言中负数取余的结果是负数,比如-123%10 = -3,需要单独处理把负号剥离,最后单独打印负号即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:21:03