程序的第一个任务是在事先不知道元素数量的情况下创建一个数组(用户输入整数直到输入 0)。我尝试使用 while 循环来实现此目的,但在输入一定数量的整数后,循环结束,我得到 3221225477 值。
#include<stdio.h>
main(){
int input=1,n=1,i=0;
int array[n];
while(input!=0){
printf("Input a number (zero for end): ");
scanf("%d",&input);
array[i]=input;
if(input!=0){
n++;
i++;
}
}
printf("\nArray: ");
for(i=0;i<n;i++)
printf("%d ",array[i]);
}
我尝试在第 8 行添加 & 符号,但它只是返回无效转换和左值的错误。
这段代码有几个问题。
main()
这在 C 中是不合法的。所有函数都需要用类型来指定。自 2011 年以来,旧的“隐式 int”规则就不再是该语言的一部分,并且早在该日期之前就已被弃用和不受欢迎。
int input=1,n=1,i=0;
int array[n];
这定义了一个大小为 1 的数组。注意,如果大小为 n
,则这
不是定义一个数组,该数组跟踪
n
值的变化并相应地增长或缩小。 C 中没有这样的东西。如果您想要一个可以增长或缩小的数组,则需要动态分配数组并根据需要调整其大小的代码。请参阅示例 C 动态增长数组。
scanf("%d",&input);
始终检查
scanf
的返回值。更好的是,不要使用 scanf
。请参阅 远离 scanf() 的初学者指南。
因为您声明为
n=1
,所以 int array[n];
只有 1 个元素。索引以 0 开头,因此 array[1]
及以上索引超出范围,不得访问。
分配足够的元素,如
int array[100000];
或通过 malloc
、realloc
等使用动态分配
请注意,在堆栈上静态分配太大的数组可能会导致运行时错误(取决于环境),因此如果发生这种情况,您应该减小大小或切换到动态分配。