如何在C中使函数返回数组?(要修复的代码)



我正试图让一个数组存储我键入的每个数字。

有些人喜欢:输入编号:687544

并以数组形式返回,如下所示:6 8 7 5 4

我只知道如何将数字按顺序存储在";存储(num(";以下功能:

#include<stdio.h>
int store(int num);
int main()
{
    int num;
    printf("Enter number: ");
    scanf("%d",&num);    
    return store(num);
}
int store(int num)
{   
if(num!= 0)
    {
int mod = num % 10;  //split last digit from number
        store(num/10);  //recuring it back to the right order
        printf("%in",mod); //divide num by 10. num /= 10 also a valid one 
}
}

以下是我尝试但没有工作代码

#include<stdio.h>
int store(int num);
int main()
{
int num,d;
printf("Enter number: ");
scanf("%d",&num);
for(d=0; num<0;d++);
{
num /= 10;
}
int a[d];
int i;
for(i=0;i<d;i++){
a[d]=store(num);
}
printf("%d n",a[d]);
}
int store(int num)
{   
if(num!= 0)
{
int mod = num % 10;  
store(num/10);  
return mod;
}
}

意外结果。。。。。。。

Enter number: 123
115183680

感觉我快到了,但我不知道哪一部分出了问题。我可以问一下如何解决这个问题吗?

我只知道如何将数字按顺序存储在";存储(num(";函数,但是我尝试扩展我的代码,结果不是我所期望的。

这里是您的代码修复,基于您编写的相同路由,(使用递归调用(读取int和解析数字,等等

#include<stdio.h>

void store(int num, int* a, int* d);
int main()
{
int a[10]; // int is 32bit, (Depending on compiler, you can not store more than 10 digit) log10(2**32) ~ 9.xx
int num,d = 0;
printf("Enter number: ");
scanf("%d",&num);
// the recursive function, should need the pointer to array, and the index which is currently parsing
store(num, a, &d);

// print your array till valid index,
for(int i = 0; i< d; i++)
printf("%d ",a[i]);
printf("n");
}   
void store(int num, int* a, int* d)
{    
if(num!= 0)
{
store(num/10, a, d);
int mod = num % 10; 
a[(*d)++] = mod;
}   
} 

这是一个修改后的版本,对我更改的内容有评论

int store(int num, int digit);
int a[20];  // Don't bother with dynamic allocation
int main()
{
int num,d;
printf("Enter number: ");
scanf("%d",&num);
int digit = 0;
int i;
digit = store(num, 0);
// Always print at least 1 digit
for(i=0; i< (digit ? digit : 1); i++){
printf(" %d", a[i]);
}
printf("n");
}
// Pass in which digit you are on
int store(int num, int digit)
{   
if(num!= 0)
{
int mod = num % 10;
int last = store(num/10, digit+1);  // next digit
// Fill array right-to-left
a[last - digit - 1] = mod;
return last;
}
return digit;  // return number of digits
}

输出

prog$ ./foo
Enter number: 0
0
prog$ ./foo
Enter number: 5
5
prog$ ./foo
Enter number: 123
1 2 3

请注意,如果不需要全局数组,可以将其作为第三个参数添加到store中。在这种情况下,不要忘记在main中初始化a[0]

最新更新