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

C++模板类求两数最值:float输入分支程序提前终止问题求助

问题原因与修复方案

嘿,我一眼就揪出问题所在了——你的float分支里犯了个超容易疏忽的小错误!

核心问题

在处理浮点数输入的代码块中,你用来存储输入值的变量fl1和fl2被错误地声明成了int类型:

int fl1, fl2; // 这里的类型定义完全错了!

当你输入一个浮点数(比如3.14)时,cin会尝试把带小数点的数值塞进整数变量里,这直接导致输入流进入错误状态。一旦输入流触发错误标记,后续所有的cin操作都会直接跳过,程序自然就没法继续执行后续步骤,看起来像是“突然终止”了。

修复方法

只需把这两个变量的类型改成float就能解决问题:

float fl1, fl2; // 匹配浮点数输入的正确类型

修复后的完整代码

#include <iostream>
using namespace std;

template <class T>
class mypair {
    T a;
    T b;
public:
    mypair(T a=0, T b=0) {
        this->a=a;
        this->b=b;
    }
    void setFirst(T a) {
        this->a = a;
    }
    T getFirst() {
        return a;
    }
    void setSecond(T b) {
        this->b = b;
    }
    T getSecond() {
        return b;
    }
    T getmax();
    T getmin();
};

template <class T>
T mypair<T>::getmax() {
    T retval;
    retval = getFirst() > getSecond() ? getFirst() : getSecond();
    return retval;
}

template <class T>
T mypair<T>::getmin() {
    T min;
    min = getFirst() < getSecond() ? getFirst() : getSecond();
    return min;
}

int main() {
    char opt;
    cout << "program to find a minimum and maximum" << endl;
    cout << "--------------------------------------------" << endl;
    cout << "Do you want to type in two integers or two floats ?"<<endl;
    cout << "(i for integer , f for float)"<<endl;
    cin >> opt;
    if (opt == 'i' || opt == 'I') {
        mypair<int> myobject;
        int int1, int2;
        cout << "Enter first INT = ";
        cin >> int1;
        myobject.setFirst(int1);
        cout << "Enter second INT = ";
        cin >> int2;
        myobject.setSecond(int2);
        cout << "---------------------------------------" << endl;
        int choice;
        cout << "Find Maximum or Minimum?" << endl;
        cout << "(1 for maximum ,0 for minimum)" << endl;
        cin >> choice;
        if (choice == 0) {
            cout << myobject.getmin();
        }
        if (choice == 1) {
            cout << myobject.getmax();
        }
    }
    if (opt == 'f' || opt == 'F') {
        mypair <float> myobject1;
        float fl1, fl2; // 已修正为float类型
        cout << "Enter first FlOAT = ";
        cin >> fl1;
        myobject1.setFirst(fl1);
        cout << "Enter second FLOAT = ";
        cin >> fl2;
        myobject1.setSecond(fl2);
        cout << "---------------------------------------" << endl;
        int choice;
        cout << "Find Maximum or Minimum?" << endl;
        cout << "(1 for maximum ,0 for minimum)" << endl;
        cin >> choice;
        if (choice == 0) {
            cout << myobject1.getmin();
        }
        if (choice == 1) {
            cout << myobject1.getmax();
        }
    }
    return 0;
}

额外小提示

以后如果再遇到类似的输入流异常,可以用cin.fail()检查输入是否成功;要是真的出错了,还能通过cin.clear()重置错误标记,搭配cin.ignore()清空输入缓冲区里的无效内容,避免程序直接卡住或终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:57:40