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

C语言数组代码中循环变量stop显示计数不匹配问题排查求助

问题原因
  • 数组越界写入:你定义的num数组长度为MAX_SIZE,合法访问下标范围是0到MAX_SIZE - 1,代码中把用户输入的数组长度写入&num[MAX_SIZE]属于数组越界操作,是C语言中的未定义行为,不仅会导致存储的长度值异常,还可能破坏栈上其他数据。
  • 提示语输出变量错误:你需要展示的是当前输入的序号(1到用户输入的长度值),但代码中printf输出的是未初始化的num[stop],数组刚定义时内部是内存中的随机垃圾值,自然无法输出预期的顺序序号。
  • 额外问题:void main不是C语言标准推荐的主函数写法,标准写法主函数返回值为int类型。
修复方案

修改思路:

  1. 单独声明一个整型变量存储用户输入的数组长度,避免数组越界
  2. 将提示语中的输出值改为循环计数器stop + 1,匹配1~N的序号展示要求
  3. 增加输入长度合法性校验,避免用户输入的长度超过数组最大容量导致后续写入越界
  4. 修正主函数写法为标准int main格式

修复后代码:

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>

#define MAX_SIZE 1000 

int main(){
    int num[MAX_SIZE];
    int arr_len; // 单独存储用户输入的数组长度
    printf("Input number of integers in the array: ");
    scanf("%d", &arr_len);
    // 边界校验,避免非法长度输入
    if (arr_len > MAX_SIZE || arr_len <= 0) {
        printf("Invalid array length, should be between 1 and %d", MAX_SIZE);
        return 1;
    }
    
    for(size_t stop=0; stop < arr_len; stop++){
        printf("\nInput numbers for array %d: ", (int)(stop + 1)); // 输出1开始的序号
        scanf("%d", &num[stop]);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:36:06