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

为何输入0后这段C语言程序无法终止?

问题分析与修复方案

原代码的核心问题

  • 数组未初始化:integers数组声明后未初始化,元素为随机垃圾值,开头while(integers[a] != 0)的判断毫无意义,甚至会触发未定义行为。
  • for循环逻辑完全错误:原for循环的表达式for (integers[a]; integers[100]; ++a)不符合语法逻辑,integers[100]已超出数组下标范围(数组大小100,合法下标为0-99),且该条件无法关联输入操作实现终止。
  • 未在输入后检查终止条件:程序未在每次输入后判断值是否为0,自然不会停止。

修复后的代码

#include <stdio.h>

int main() {
    int integers[100];
    int a = 0;

    while (1) {
        printf("Enter the integer: \n");
        scanf("%d", &integers[a]);
        
        if (integers[a] == 0) {
            break;
        }
        
        a++;
        if (a >= 100) {
            printf("数组已满,无法继续输入\n");
            break;
        }
    }

    return 0;
}

修复说明

  • 数组下标从0开始,符合C语言数组的常规使用习惯。
  • 用while(1)创建无限循环,每次输入后立即检查是否为0,满足条件时用break终止循环。
  • 添加数组越界检查,避免输入超过100个整数时触发未定义行为。
  • 移除原代码中无意义的嵌套循环逻辑,简化流程,让逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:46:58