_rivulet 2021-03-18 17:15 采纳率: 66.7%
浏览 12

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

#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?

错在哪里?如何改进?

  • 写回答

1条回答 默认 最新

  • 微软技术分享 优质创作者: 编程框架技术领域 2023-06-19 16:42
    关注

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

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

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

    评论

报告相同问题?