如何声明C中包含未知条目数的数组?

时间:2013-03-01 05:44:59

标签: c arrays function

问题如下: 编写一个提示用户输入一系列正整数的函数,以值-1结束。然后,该函数必须返回用户输入的最大值和最小值。您可以假设用户在输入-1之前输入至少一个正整数。

所以我想的是创建一个数组来存储输入的所有值。唯一的问题是我不太确定如何声明一个具有未知数量条目的数组,因为很明显我不知道用户在-1之前输入了多少个整数。

然后对于后一部分,我想最大/最小= arr [0],然后索引++,一旦arr [index]> maximum或arr [index]

谢谢!

3 个答案:

答案 0 :(得分:2)

使用动态内存分配函数,如malloc calloc和realloc 或者如果你有兴趣做一些真正好的代码使用链表。

BTW是否有必要将所有数字存储在数组中?你可以在飞行中检查最小值和最大值???

一个简单的算法将是:

int maxval=0, minval = 0;
while(inputval != -1)
{
    if(inputval < minval)
       minval = inputval;

    if(inputval > maxval)
       maxval = inputval;
}

答案 1 :(得分:0)

不幸的是,你不能 - 至少不能直接。使用malloc()可以分配一个具有可变长度的数组,并且可以使用它来继续分配更多空间。例如

int* numbers = malloc(sizeof(int)*how_many);
if (!numbers) {
  //error
}

//do stuff.

在您的示例中,您可以执行类似

的操作
while(not_done) {
  if( array-is-full ) {
    how_many *= 2;
    int* new_numbers = (int*)malloc(sizeof(int)*how_many);
    for(int i = 0; i < index;i++)
       new_numbers[i] = numbers[i];
    free(numbers);
    numbers = new_numbers;
  }

  //read user input
  //stick it into the array


}

答案 2 :(得分:0)

您可以使用动态内存分配,尤其是realloc。它允许您在每次输入新元素时调整数组大小

BTW如果要从输入中提取最小值和最大值,则无需将输入参数保存到数组中。

如何将元素保存到动态数组并提取min和max

之后的任何方式
int min = -1;
int max = -1;
int i = 0;

int *array=malloc(sizof(int));

while (scanf("%d", &x)>0 && x>0)
{
    if(i>0)
        realloc(array, (i+1)*sizeof(int));
    else {
        min = x;
        max = x;
    }
    array[i] = x;
    if (x>max) max = x;
    if (x<min) min = x;
    i++;
} 
相关问题