You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++计算数组评分平均值重复调用结果累加问题排查问询

问题原因
  • 核心问题出在sum变量的作用域和初始化逻辑上:你的sum是定义在displayAverageRating函数之外的全局变量/静态变量,没有在每次调用函数时重置为0。第一次调用函数时sum从0开始累加得到正确总和,算出平均值4;第二次调用时sum保留了第一次的总和结果,再累加一次数组所有元素,总和变成原来的2倍,算出来的平均值自然就是8。
  • 代码还有额外的冗余逻辑问题:你把平均值计算放在了for循环内部,还额外加了i == 835的判断,完全没有必要;同时循环边界写死了835,如果NUM_PEOPLE的宏定义和836不一致,会直接导致计算结果错误。
修复方案
  1. 将sum改为displayAverageRating的内部局部变量,每次调用函数时自动初始化为0,不会保留上一次的计算结果
  2. 简化计算逻辑,循环只负责累加数组元素,循环结束后统一计算平均值输出,循环边界使用宏定义NUM_PEOPLE不要写死,提升代码可维护性
  3. 如果需要保留小数精度,平均值可以用double类型存储,计算时做强制类型转换避免整数除法精度丢失

修复后的代码示例:

void displayAverageRating(int ratings[NUM_PEOPLE]) {
    int sum = 0;
    double avgrating;
    // 循环变量i也定义在for内部,避免全局变量干扰
    for (int i = 0; i < NUM_PEOPLE; i++) {
        sum += ratings[i];
    }
    avgrating = (double)sum / NUM_PEOPLE;
    cout << "The Average of the ratings for Star Wars: Episode I The Phantom "
            "Menace was ";
    cout << avgrating << "\n";
}

如果不需要小数精度,直接把avgrating改为int类型,去掉计算时的(double)强转即可。

内容的提问来源于stack exchange,提问作者North

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:15:01