为何输入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
相关产品推荐
相关产品推荐

