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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:53:10