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", ¤t[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", ¤t[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
相关产品推荐
相关产品推荐

