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

