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
相关产品推荐
相关产品推荐

