C一段代码错了= =请指教

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:57:46
题目是输入一个数,比如2,输出2,输入56,输出5,6输入4987,输出4,9,8,7采用函数递归,下面是我的代码.
#include<stdio.h>
int i=0;

int digui(int k)
{
int b[100],p;

b[i]=k%10;
k=k/10;
if(k==0)
{
return b;
}
else
{
i++;
digui(k);
}
}
void main()
{
int a,b[100],c;

printf("\n请输入一个数: ");
scanf("%d",&a);

b[100]=digui(a);
printf("分解后: ");
for(c=0;c<=i;c++)
{
printf("%d ",b[c]);
}
}
貌似错的不是数组的赋值就是递归的方法= =
不能返回数组么?
回2楼,谢谢指教,我知道下标是从0开始的,所以我是b[100],貌似记得老师讲过,b[100]表示这个数组,b[99]就是这个数组的第100的数了

可以返回数组,如楼下所说,返回的是数组首地址,而且如果这个数组是你在函数内声明的数组,退出函数时空间已释放,得到数组首地址也没有用
#include<stdio.h>
int i=0;

int digui(int b[100],int k)
{
int p;

b[i]=k%10;
k=k/10;
if(k==0)
{
return 0;
}
else
{
i++;
digui(b,k);
}
}
void main()
{
int a,b[100],c;

printf("\n请输入一个数: ");
scanf("%d",&a);

digui(b,a);
printf("分解后: ");
for(c=i;c>=0;c--)
{
printf("%d ",b[c]);
}
}

我没仔细读楼主的思路,不过我发现了一个问题。

int b[100],p; //下标是从0-99的,而不是从1-100

b[100]=digui(a); //那么这句就错了。

而且,从上面这句可以看出,楼主想把 digui() 函数的结果全部赋值给b[]数组 (从b[0]到b[99]),这样直接赋值是不可以的。只能用循环来实现一个个赋值,比如下面

for(i=0;i<100;i++)
{ b[i]=XXXXXXX }

顺便说下,把一个数的各个位分割成单独的数字,并赋值给一个数组,可以用如下的一条语句。很方便的。

for(i=0;i<100;i++)
{a[i]=n%10;n=n/10;}