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

为何C语言代码中的数组无法存储输入数字,仅输出0?

问题分析与修复

代码中的核心错误

  • n未初始化:局部变量默认是随机垃圾值,会导致后续打印循环的行为完全不可预测。
  • 循环逻辑彻底混乱:
    1. 第一次进入while(x[i] != 0)时,x[i]是未初始化的随机值,大概率不等于0才会执行scanf。
    2. 输入非0数字时,while循环会持续覆盖同一个x[i],直到输入0才退出while,此时外层循环直接break,数组里只保存了最后输入的0,前面的数字全被丢弃。
    3. 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]);
    }
}

修复说明

  1. 初始化n为0,确保计数器从正确起始值开始统计有效输入数量。
  2. 调整循环逻辑:先读入数字到数组对应位置,判断是否为0,是则终止;否则计数器自增,继续读入下一个数。
  3. 增加数组越界判断(可选),避免输入超过数组容量引发的内存问题。
  4. 打印循环条件i < n会跳过最后输入的0,若需要包含0,可修改为i <= n。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:43:31