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

C语言求平均值程序编译正常但输出异常,求助排查问题

C语言平均值计算程序异常排查与修复

核心问题分析

  • 局部变量未初始化:whilst、ncurrent、average都是未初始化的局部变量,C语言里局部变量默认不会清零,会保留内存中的随机值。这直接导致第一个循环的条件一开始就不成立,跳过了所有输入步骤,最后输出的average就是随机垃圾值。
  • 循环条件语法错误:while (whilst ==! nums+1) 是完全错误的写法,你想表达的应该是while (whilst != nums)(或根据逻辑调整为whilst < nums)。==!会被编译器解析成== (!nums + 1),逻辑完全偏离预期。
  • 数组定义冗余:int current[nums + 1]; 不需要额外+1,要存储nums个数字,数组大小设为nums即可,索引从0到nums-1足够。
  • 平均值计算缺失关键步骤:代码里只做了数字求和,没有除以数字的数量nums,就算输入正常,最后得到的也是总和而非平均值。
  • printf格式错误:printf("%d", average, "is your average. "); 格式字符串只有一个%d占位符,却传入了两个参数,正确写法是把文本整合到格式字符串中。
  • 换行符使用错误:原代码中printf的换行直接用了换行(输入格式问题),应该用\n实现换行,否则会导致编译警告或输出混乱。

修正后的代码

#include <stdio.h>

int main() {
    int nums;
    printf("Averagerator Machinerator!\n");
    printf("How many numbers are in this average? ");
    scanf("%d", &nums);
    
    // 初始化循环变量,从0开始计数
    int whilst = 0;
    // 数组大小匹配输入的数字数量
    int current[nums];
    // 循环nums次,完成所有数字输入
    while (whilst < nums) {
        printf("A number, please: ");
        scanf("%d", &current[whilst]);
        whilst++;
    }
    
    // 初始化总和为0,避免随机值干扰
    int sum = 0;
    int ncurrent = 0;
    while (ncurrent < nums) {
        sum += current[ncurrent];
        ncurrent++;
    }
    
    // 计算平均值(整数除法会截断小数)
    int average = sum / nums;
    printf("%d is your average.\n", average);
    
    // 等待输入,防止程序运行后直接退出(可选)
    getchar();
    getchar();
    return 0;
}

进阶优化(支持小数平均值)

如果需要保留小数部分,可改用float或double类型存储数值:

#include <stdio.h>

int main() {
    int nums;
    printf("Averagerator Machinerator!\n");
    printf("How many numbers are in this average? ");
    scanf("%d", &nums);
    
    int whilst = 0;
    double current[nums];
    while (whilst < nums) {
        printf("A number, please: ");
        scanf("%lf", &current[whilst]);
        whilst++;
    }
    
    double sum = 0.0;
    int ncurrent = 0;
    while (ncurrent < nums) {
        sum += current[ncurrent];
        ncurrent++;
    }
    
    double average = sum / nums;
    // 保留两位小数输出
    printf("%.2lf is your average.\n", average);
    
    getchar();
    getchar();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:20:15