项目场景:
逆波兰计算器的异常处理完善和流挂起问题
问题分析与修改
首先在处理”+“运算符时原先的代码咯漏考虑了”栈underflow"的情况:
case '+':
polishcal.top(a);
polishcal.pop();
polishcal.top(b);
polishcal.pop();
//cout<<shuchu<<endl;
polishcal.push(b+a);
//cout<<shuchu<<endl;
break;
修改:(-,*,/亦如此)
case '+':
polishcal.top(a);
polishcal.pop();
if (polishcal.empty()) {cout<<"your polishcal underflow!"<<endl;polishcal.push(a);break;}
polishcal.top(b);
polishcal.pop();
//cout<<shuchu<<endl;
polishcal.push(b+a);
//cout<<shuchu<<endl;
break;
然后就是这里当用户输入usernum为字符时会产生流挂起的情况,导致整个程序陷入一个死循环(关键是编译竟然不报错!)
case '?':
cout<<"Enter a real number:";
cin>>usernum;
polishcal.push(usernum);
break;
修改过后好一点(include ),但是我觉得这个修改虽然避免了流挂起但仍有整数范围问题,以后再改吧;
case '?':
cout<<"Enter a real number:";
cin>>usernum;
while (cin.fail() || usernum < -100.0 || usernum > 64.0) {
// Clear the error flags
cin.clear();
// Discard the bad input
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input. Please enter a number!: ";
cin >> usernum;
}
polishcal.push(usernum);
break;
欢迎各位批评指正!