数字到整数,顺序相同

时间:2018-01-24 15:31:38

标签: c arrays

我有一个名为fun(int num, int * array);的函数,它以intint array作为其句柄。我正在尝试将int转换为数组。

当我运行程序时,我没有正确显示数组

int fun(int num, int*array) {
   int count =0;
   while(num>0) {
      num/= 10;
      count++;
   }
   array[count];
   // for loop works
 }

当我在程序中打印数组时,即每次运行程序时,我都会得到随机数字。

4 个答案:

答案 0 :(得分:1)

这条线应该做什么?

array[count];

由于你的有趣函数中的整数数组会发生变化,你必须分配内存(使用malloc,realloc,...)。

编辑:加号,当您计算“num”中有多少位数时,您已经将值保持为“num”。 复制“num”!

编辑2:我看你的功能越多,你使用它就越有问题。

Fisrt,你想将你的整数分解为一个int数组。 好的,但是整数有范围,因此整数具有最大数字。 根据我的记忆,64位整数有20位数。 所以你可以简单地使用“int array [NB_DIGIT_INT_MAX];”用“#define NB_DIGIT_INT_MAX 21”。 因此,分配不是必需的并且会增加代码的复杂性(调用者必须在函数调用后释放)。

其次,你的有趣功能并没有说明有多少个案会保存你的整数。 假设num = 12,你的数组将有“array [0] = 1,array [1] = 2”,但你怎么知道在哪里停止? 如果num = 2345,你怎么知道你的数组中只有4个第一个案例是合法的? 有两种方法:你有另一个变量来保存数组的实际大小,或者你的数组中有一个特殊值,它表示“它就是结束”(就像用作字符串的char数组的'\ 0')。 / p>

您可以使用“-1”。

让我们试一试,如果事情不清楚(英语不是我的母语),请不要犹豫提问。

答案 1 :(得分:0)

您的数组甚至没有分配,这不能按预期工作。你很幸运没有分段错误。如果要向数组添加整数以使其增长,则需要分配更大的数组,复制值并将新的数组添加到新数组并删除前一个数组,并将array变量保留为指针到新阵列。此外,您需要将实际数组的大小作为fun的参数传递。

答案 2 :(得分:0)

count变量可以是全局变量,在所有函数之外初始化它

short count;

整个程序可以修改如下

#include<stdio.h>
#include<stdlib.h>
short count;
void fun(int num, int **ptr) {
// You need a pointer to a pointer and return type can be void
 int num_copy=num;
 count=0; // Setting the count to zero
 while(num_copy>0) {
  num_copy/= 10; // Don't modify the original number
  count++;
 }
//Allocate enough memory to store the digits
 *ptr=malloc(count*sizeof **ptr);
 if(NULL==*ptr){
  perror("Can't allocate memory");
  exit(1);
 }
// Then do the loop part with original num
 for(int i=count -1; i>=0; i--) {
  (*ptr)[i] = num%10;
  num /= 10;
 }
// By now you have an array 'array' of integers which you could print in main.
}

int main()
{
int number = 123456789;
int *array;
fun(number,&array); // &array is of type pointer to a pointer to integers
 //Now print the individual digits
printf("Individual digits are : \n");
for(int i=count-1;i>=0;i--)
 printf("%d\n",array[i]);
}

答案 3 :(得分:0)

在我看来,你正在从一个整数转换为数字。但是我没有看到你的代码在哪里写入数组。

如果在此之前未初始化数组,那么这将解释为什么它仍然包含随机值。