做了一个用户输入规定数组数量的代码,无法得到正确的结果

#include <stdio.h>

int main()
{
    int cnt;
    int x;
    double sum=0.0;
    printf("请输入数字的数量\n");
    scanf("%d",&cnt);
    if(cnt>0){
        int number[cnt];
        scanf("%d",&x);
        while(x!=-1){
        number[cnt]=x;
        sum+=x;
        cnt++;
        scanf("%d",&x);
    }
    
    }
        printf("%f\n",sum/cnt);
    return 0;
}

如果输入cnt=10

结果:number【cnt】=0

而进行cnt++时得到cnt=11

为什么number【cnt】=0?

错在哪里?如何改进?

我看了你的代码,很简单的问题。

首先,数组的索引是从0开始的,而你在循环中使用了 cnt 作为索引,但是你在循环前已经将 cnt 初始化为用户输入的数字数量。这将导致数组越界访问。在数组 number 中,有效的索引范围是从 0 到 cnt-1,而你使用了 number[cnt],超出了数组的有效范围。

其次,你在循环中使用了 cnt++,这是错误的。你应该使用一个不同的变量来作为循环的计数器,而不是修改 cnt 的值。修改 cnt 的值会导致后续计算平均值时出现错误。