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

如何用for循环为数组赋值?C语言数组输出全0问题排查

问题分析

你的代码存在两个核心问题:

  • 数组空间不足+越界访问:你只给count数组分配了1个元素的空间(int count[1] = {0}),当输入的n大于1时,for循环里访问count[1]、count[2]等位置属于越界访问内存,这是C语言中的未定义行为,当前输出全0只是碰巧内存中这些位置的值为0,实际运行可能出现随机值甚至程序崩溃。
  • 缺少元素赋值逻辑:你完全没有往数组中写入递增数值的代码,仅初始化了第一个元素为0,自然无法得到递增的输出。
解决方案

根据你的需求,分两种场景处理:

场景1:需要用数组存储递增数值

先根据输入的n分配足够的数组空间,再在循环中给数组元素赋值,最后打印:

#include <stdio.h>

int main() {
    int n;

    printf("\nEnter an int for n: ");
    scanf_s("%d", &n);

    // 根据n的大小定义变长数组(C99及以后标准支持)
    int count[n]; 
    for (int i = 0; i < n; i++) {
         count[i] = i; // 给数组元素赋值递增的数
         printf("%d \n", count[i]);
     }

    return 0;
}

注:如果你的编译环境不支持变长数组,可以用动态内存分配,用完记得释放:

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

int main() {
    int n;
    int *count;

    printf("\nEnter an int for n: ");
    scanf_s("%d", &n);

    count = (int*)malloc(n * sizeof(int));
    if (count == NULL) { // 检查内存分配是否成功
        printf("Memory allocation failed\n");
        return 1;
    }

    for (int i = 0; i < n; i++) {
         count[i] = i;
         printf("%d \n", count[i]);
     }

    free(count); // 释放动态分配的内存
    return 0;
}

场景2:仅需输出递增数值,无需存储到数组

如果你的需求只是打印0到n-1的递增数,完全不需要数组,直接打印循环变量i即可,代码更简洁:

#include <stdio.h>

int main() {
    int n;

    printf("\nEnter an int for n: ");
    scanf_s("%d", &n);

    for (int i = 0; i < n; i++) {
         printf("%d \n", i);
     }

    return 0;
}
验证结果

运行上述任意一段代码,输入6后,都会输出:

0
1
2
3
4
5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:40:54