如何用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
相关产品推荐
相关产品推荐

