计算10个数字平均值得到异常大值,求C语言代码问题排查
代码问题分析及修正
你的代码存在几个关键问题,直接导致了异常大数值的输出:
- 变量未声明:
total、counter、grade、average均未指定数据类型。C语言要求必须先声明变量类型(如int)才能使用,虽然旧版标准允许隐式声明为int,但这属于不规范写法,可能引发不可预期的内存行为。 - printf格式串完全错误:最后一行
printf("%d", "average is:", average);中,%d是整数输出格式符,但你传入的第一个参数是字符串常量"average is:",printf会把该字符串的内存地址当作整数输出,这就是你看到超大数值的直接原因。正确写法需要用%s输出字符串,%d输出整数,格式串必须和参数一一对应。 - (可选)整数除法精度丢失:如果总分不是10的倍数,
total / 10会执行整数除法,直接丢弃小数部分。若需要保留小数,可以将变量改为float/double类型,执行浮点数除法。
修正后的基础版本
#include <stdio.h> int main(void) { int total = 0; int counter = 1; int grade; int average; while(counter <= 10) { printf("Enter grade: "); scanf("%d", &grade); total += grade; counter += 1; } average = total / 10; printf("average is: %d\n", average); }
保留小数的版本
#include <stdio.h> int main(void) { int total = 0; int counter = 1; int grade; double average; while(counter <= 10) { printf("Enter grade: "); scanf("%d", &grade); total += grade; counter += 1; } average = (double)total / 10; // 强制转换为浮点数,避免整数除法精度丢失 printf("average is: %.2f\n", average); }
内容的提问来源于stack exchange,提问作者Banned
相关产品推荐
相关产品推荐

