我的数组创建程序在输入大约8个整数后返回值3221225477

问题描述 投票:0回答:2

程序的第一个任务是在事先不知道元素数量的情况下创建一个数组(用户输入整数直到输入 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 行添加 & 符号,但它只是返回无效转换和左值的错误。

arrays c while-loop
2个回答
2
投票

这段代码有几个问题。

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() 的初学者指南


1
投票

因为您声明为

n=1
,所以
int array[n];
只有 1 个元素。索引以 0 开头,因此
array[1]
及以上索引超出范围,不得访问。

分配足够的元素,如

int array[100000];
或通过
malloc
realloc
等使用动态分配

请注意,在堆栈上静态分配太大的数组可能会导致运行时错误(取决于环境),因此如果发生这种情况,您应该减小大小或切换到动态分配。

© www.soinside.com 2019 - 2024. All rights reserved.