我試圖讓一個陣列存盤我輸入的每個數字。
有人喜歡: 輸入號碼:687544
并以陣列形式回傳: 6 8 7 5 4 4
我只弄清楚如何在下面的“store (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("%i\n",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
感覺我快到了,但我不知道哪一部分出了問題。請問如何解決這個問題?
我只弄清楚如何在“store (num)”函式中按順序存盤 nums,但是我嘗試擴展我的代碼,結果不是我所期望的。
uj5u.com熱心網友回復:
這是一個修改后的版本,對我所做的更改進行了評論
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. 在這種情況下不要忘記a[0]在 main 中初始化。
uj5u.com熱心網友回復:
這是您的代碼固定,基于您撰寫的相同路由(使用遞回呼叫)并讀取 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; 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;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523711.html
標籤:数组C功能
上一篇:Python回圈不停地繼續
下一篇:請解釋這個MDN示例
