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

C语言数组循环异常:scores[4]/scores[5]时循环仅执行2次

问题分析与修复

核心问题1:未初始化变量就定义变长数组

你在写int scores[n];的时候,变量n还没被赋值,此时n是栈上的随机垃圾值。后续通过scanf输入的n并不会改变这个数组的实际大小,这会导致数组真实长度和你预期的完全不符,埋下内存访问错误的隐患。

核心问题2:数组索引越界

循环里的scanf("%i", &scores[n]);犯了低级错误——你应该用当前循环的索引i来访问数组元素,而不是用数组长度n。scores[n]已经超出了数组的合法范围(数组下标从0到n-1),这种越界访问会破坏栈上的其他变量(比如循环变量i或者n本身),这就是为什么长度4或5时循环只跑2次的原因:越界写操作直接篡改了循环的控制变量。

修正后的代码

#include <stdio.h>

int main()
{
    int n;
    printf("Enter the number of scores you have? ");
    // 先输入n,再定义变长数组
    scanf("%i", &n);
    printf("%i\n", n);
    int scores[n];

    for(int i = 0; i < n; i++)
    {
       printf("Enter the score:\n");
       // 使用i作为数组索引,正确访问每个元素
       scanf("%i", &scores[i]);
       printf("The number of loop condition is: %i\n", i);
    }
    return 0;
}

额外说明

  • 变长数组(VLA)是C99标准引入的特性,部分编译器(比如MSVC)可能不支持,如果需要兼容更多环境,可以改用动态内存分配(malloc/free)来创建数组。
  • 永远要确保数组访问的下标在合法范围内,越界访问属于未定义行为,症状可能因环境、数据不同而变化,很难调试。

内容的提问来源于stack exchange,提问作者Syed Shahabuddin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:45:05