You need to enable JavaScript to run this app. C++无数组实现遇0停止的整数输入求最大最小值输出最小值异常如何修复
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 16:15:04