C语言数组读取时多读取一个输入值的问题求助
问题排查与修复
核心错误点
- 数组越界访问:所有循环都使用了
i <= length,但数组下标范围是0到length-1,这会导致访问数组外的内存,读取到随机垃圾值,直接引发最大值、均值计算错误。 - 数组初始化时机错误:在
length=0时就声明int arr[length];属于C语言未定义行为,必须在获取合法的length值后再创建数组。 - 多余循环嵌套:输入数组时的外层
do-while完全无用,前面的循环已经确保length为正整数,该循环永远不会触发重复执行。
修正后的代码
#include <stdio.h> int main() { int length = 0; do { printf("please enter a positive nonzero integer: \n"); scanf("%d", &length); if (length <= 0) printf("Length is invalid. Try again. \n"); } while (length <= 0); // 获取合法长度后再定义数组 int arr[length]; printf("please enter %d numbers: \n", length); // 循环条件改为i < length,避免越界 for (int i = 0; i < length; ++i) { scanf("%d", &arr[i]); } int min = arr[0]; int max = arr[0]; double sum = arr[0]; // 循环条件改为i < length,仅遍历数组内元素 for (int i = 1; i < length; i++) { if (arr[i] > max) { max = arr[i]; } if (arr[i] < min) { min = arr[i]; } sum = sum + arr[i]; } printf("Minimum is: %d\n Maximum is: %d\n Mean is: %f\n", min, max, sum/length); return 0; }
验证结果
当输入length=5,数组元素为1 2 3 4 5时,修正后的代码会正确输出:
Minimum is: 1
Maximum is: 5
Mean is: 3.000000
内容的提问来源于stack exchange,提问作者Leah Trahan
相关产品推荐
相关产品推荐

