C++无数组实现遇0停止的整数输入求最大最小值输出最小值异常如何修复
核心问题定位
代码运行结果不符合预期的根本原因是将max、min两个统计变量直接初始化为0,而0是程序约定的输入终止标记,不属于待统计的有效数据范围。针对全正整数的测试输入序列,所有有效数值都大于初始的min值0,导致n < min的判断分支永远不会被触发,最终min始终保持为初始值0,和预期的最小值1存在偏差。
具体修复方案
- 移除将max、min固定初始化为0的错误逻辑
- 调整输入读取流程:先读取第一个输入值,如果该值就是0,说明用户没有输入任何有效统计数据,直接给出提示即可
- 用读取到的第一个有效数值,同时初始化max和min的基准值(此时该数值既是当前的最大值也是最小值)
- 循环读取后续输入:每读到一个数值时先判断是否为终止值0,如果是0就立即终止循环,不把0纳入统计范围;如果是有效数值,就分别和当前的max、min比较,动态更新两个统计值
- 循环结束后按照要求的格式输出最终的max、min结果,全程不需要用数组存储输入值,符合题目约束
修复后可正常运行的代码
#include <iostream> using namespace std; int main() { int n, max, min; cout << "请输入整数,输入0结束输入:" << endl; cin >> n; // 边界处理:首个输入就是0时无有效统计数据 if (n == 0) { cout << "未录入有效整数,无统计结果" << endl; return 0; } // 以第一个有效数为基准初始化最大、最小值 max = n; min = n; while (n != 0) { cin >> n; // 碰到终止值直接跳出,不参与后续比较 if (n == 0) break; if (n > max) max = n; if (n < min) min = n; } cout << "min=" << min << " max=" << max << endl; return 0; }
测试验证
针对测试用例输入序列1 2 3 4 5 0,程序会先把第一个有效数1作为max、min的初始值,后续依次读取2、3、4、5,逐步把max更新为5,min始终保持1;读到终止值0时直接跳出循环,最终输出min=1 max=5,完全符合预期结果。
内容的提问来源于stack exchange,提问作者alkey smagul
相关产品推荐
相关产品推荐

