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

为何动态数组输入≥7或循环设为10时,输出始终仅6个变量?

问题分析与解决

你的代码核心问题是变长数组的声明时机错误:

  • 声明数组int dizi[n];时,变量n还没被用户输入初始化,此时n是栈内存里的随机垃圾值(你的环境里这个值刚好是6)。
  • 变长数组的大小在声明时就固定了,后续哪怕用scanf修改n,数组实际大小也不会变。
  • 当你输入7或把循环条件改成10时,循环尝试访问数组越界的位置,这属于C语言的未定义行为——你的环境没崩溃,但数组实际大小还是最初的6,所以只会输出6个值。

修正后的代码

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

int main() {
    int i;
    int n;
    
    printf("N: ");
    scanf("%d", &n); // 先读取用户输入的n,确定数组大小
    int dizi[n];     // 此时n已初始化,数组大小正确
    
    srand(time(0));   
    
    for (i = 0; i < n; i++) {   
        dizi[i] = rand();
        printf("\n%d", dizi[i]);
    }
    
    return 0;
}

兼容老编译器的替代方案

如果你的编译器不支持C99的变长数组(比如老版本MSVC),可以用动态内存分配实现:

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

int main() {
    int i;
    int n;
    
    printf("N: ");
    scanf("%d", &n);
    // 动态分配内存
    int *dizi = malloc(n * sizeof(int));
    if (dizi == NULL) { // 检查内存分配是否成功
        printf("内存分配失败\n");
        return 1;
    }
    
    srand(time(0));   
    
    for (i = 0; i < n; i++) {   
        dizi[i] = rand();
        printf("\n%d", dizi[i]);
    }
    
    free(dizi); // 使用完释放内存
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:16:29