c语言,求出是几位数,输出每个数字并逆向输出

#include<stdio.h>
int main()
{
int x,a[5],i;
int n=0;
scanf("%d",&x);
while(x!=0)
{
a[n]=x%10;
n++;
x = x / 10;
}
printf("%d位数\n",n);
printf("输出每一个数:");
for(i=4;i>=0;i--)
if(a[i]!='\0') printf("%d",a[i]);
printf("\n");
printf("逆向输出:\n");
for(i=0;a[i]!='\0';i++)
printf("%d ",a[i]);
return 0;
}
为什么我的结果输出后总是会多许多很乱的数字,请高手帮忙解答下,谢谢!
如果a全赋零.那么输入出来的0就全被忽略了
eg: 12305 --->.1235

第1个回答  2012-04-12
因为你输入的是一个三位数,而你数组大小为5,这意味着数组的最后两位没有定义,所以会随机输出两个数字本回答被提问者采纳
第2个回答  2012-04-12
你的数组设置的大小是5,并且没有赋初值,你测试的时候输入的只有3位,所以后面2位输出的是内存中的随机值。你把数组初值都赋值为0就好了。
第3个回答  2012-04-12
int x,a[5],i;
for (i = 0;i < 5;i++)
{
a[i] = 0;
}
这样即可。
第4个回答  2012-04-12
a[5]没有初始化
for(int i = 0 ; i < 4; i ++ )
{
a[i] = 0 ;
}
另外建议:a[i]!='\0'改成a[i]!=0;
虽然两者意义是一样的,但可读性差
相似回答