我有这段代码:
#include <stdio.h>
int average(int array []);
int main () {
int num_array[];
int x = 0;
while(num_array[x] != -1){
printf("Enter a number\n");
scanf("%d",&num_array[x]);
x++;
}
printf("%d\n", average(num_array));
return 0;
}
int average(int array[]){
int i;
int total_size = (int)sizeof(array);
int sum = 0;
for(i = 0; i < total_size; i++){
sum = sum + array[i];
}
return sum/total_size;
}
但是我在编译时遇到错误,因为我没有初始化数组。但是我无法做到,因为我不知道它的大小。
我该如何解决这个问题?
答案 0 :(得分:1)
您无法声明类似
的数组int num_array[];
在C中,除非它是函数的参数。您必须指定大小。
答案 1 :(得分:1)
除非您使用的是数组库,否则这在C中实际上是一个非常棘手的问题。你实际谈论的是一个可成长的数组。对于您要尝试的操作,您可以使用malloc()
以初始大小(例如10)开始,随着输入增长,您必须将realloc()
数组调整为更大的大小。通常,每次达到限制时,都会使数组的大小加倍。如果你是一个初学的C程序员,这可能太过分了。我会设置一个固定限制,并在限制被触发后不再接受任何输入来强制执行它。鉴于你可以轻松地分配1000个int
并且人类不想输入那么多,你可以提前做出实际限制并声明数组:
int num_array[1000];
答案 2 :(得分:0)
您需要在此处提供数组的大小:int num_array[];
。
如果您使用的是未知大小的结构,您可以:
询问用户将输入多少个数字(不太实际,但如果您的案例很简单,则可能就足够了。)
使用默认大小初始化它,例如10,然后如果需要,创建更大的数组并将当前数据复制到新数组。
或者,您使用数据结构之类的链接列表并随着时间创建新元素,从而使您的列表能够根据需要增长。