_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 的值会导致后续计算平均值时出现错误。

    评论

报告相同问题?

悬赏问题

  • ¥15 ensp路由器启动不了一直报#
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了
  • ¥15 数学建模数学建模需要
  • ¥15 已知许多点位,想通过高斯分布来随机选择固定数量的点位怎么改
  • ¥20 nao机器人语音识别问题
  • ¥15 怎么生成确定数目的泊松点过程
  • ¥15 layui数据表格多次重载的数据覆盖问题