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

C语言循环读取不同长度数组求和代码运行异常问题咨询

问题分析
  • 数组长度读取逻辑位置错误:你只在循环外读取了一次数组长度x,循环处理每个数组的过程中没有重新读取下一个数组的长度,导致程序始终按照第一次读取的长度5来读取每个数组的元素,自然会把下一个数组的长度值8当成当前数组的元素处理。
  • 变长数组定义位置不合理:当前你在循环外定义了长度为x的变长数组line,后续如果数组长度变化,这个数组的长度也无法同步更新。另外你的需求仅需要求和,完全不需要存储所有数组元素,也可以省略数组定义减少不必要的内存开销。
  • 存在重复定义变量i的问题:外层循环和内层循环都定义了同名变量i,虽然C99及以后标准支持内层变量遮蔽外层变量,但属于不规范的写法,容易引发逻辑混淆。
修复方案

调整读取逻辑,把数组长度读取的代码放到外层循环内部,每处理一个数组前先读取当前数组的长度。你可以选择保留数组存储元素,也可以直接边读边累加省略数组,这里提供两种实现:

方案1:省略数组直接求和(最优,无额外内存开销)

#include <stdio.h>
int main(){
    int total_arr, arr_len;
    int case_num = 1;
    int sum = 0;
    int num;

    // 读取数组总个数
    scanf("%d", &total_arr);

    for(int i=0; i < total_arr; i++){
        sum = 0;
        // 每轮先读取当前数组的长度
        scanf("%d", &arr_len);
        for(int j=0; j < arr_len; j++){
            scanf("%d", &num);
            sum += num;
        }
        printf("Case #%d: %d\n", case_num, sum);
        case_num++;
    }
    return 0;
}

方案2:保留数组存储元素的实现

#include <stdio.h>
int main(){
    int total_arr, arr_len;
    int case_num = 1;
    int sum = 0;

    scanf("%d", &total_arr);

    for(int i=0; i < total_arr; i++){
        sum = 0;
        scanf("%d", &arr_len);
        // 每次根据当前数组长度定义变长数组
        int line[arr_len];
        for(int j=0; j < arr_len; j++){
            scanf("%d", &line[j]);
            sum += line[j];
        }
        printf("Case #%d: %d\n", case_num, sum);
        case_num++;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Kang Nul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:09:01