为何C语言代码中的数组无法存储输入数字,仅输出0?
问题分析与修复
代码中的核心错误
n未初始化:局部变量默认是随机垃圾值,会导致后续打印循环的行为完全不可预测。- 循环逻辑彻底混乱:
- 第一次进入
while(x[i] != 0)时,x[i]是未初始化的随机值,大概率不等于0才会执行scanf。 - 输入非0数字时,
while循环会持续覆盖同一个x[i],直到输入0才退出while,此时外层循环直接break,数组里只保存了最后输入的0,前面的数字全被丢弃。 n在每次scanf后自增,统计的是重复覆盖同一位置的次数,而非有效输入的数字数量。
- 第一次进入
修复后的代码
#include <stdio.h> int main() { int x[100]; int n = 0; // 初始化计数器为0 int i; while (1) { scanf("%d", &x[n]); // 直接存入数组当前下标位置 if (x[n] == 0) { break; // 输入0则终止输入循环 } n++; // 非0则计数器自增,准备存储下一个数 // 可选:防止输入超过数组容量导致内存错误 if (n >= 100) { printf("数组已满,停止输入\n"); break; } } // 打印所有非0输入(若要包含0,可将条件改为i <= n) for(i = 0; i < n; i++) { printf("%d\n", x[i]); } }
修复说明
- 初始化
n为0,确保计数器从正确起始值开始统计有效输入数量。 - 调整循环逻辑:先读入数字到数组对应位置,判断是否为0,是则终止;否则计数器自增,继续读入下一个数。
- 增加数组越界判断(可选),避免输入超过数组容量引发的内存问题。
- 打印循环条件
i < n会跳过最后输入的0,若需要包含0,可修改为i <= n。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

