#include <iostream>
#include <exception>
#include <string>
using namespace std;
int main()
{
try {
cout << "Please input your age: " << endl;
int age;
cin >> age;
if (age > 100 || age < 0) {
throw 130.1;
throw 101;
}
cout << "Good input\n";
}
catch (char e) {
cout << "Wrong input as char " <<e<< endl;
}
catch (int e) {
cout << "Wrong input as int " <<e<< endl;
}
catch (float e) {
cout << "Wrong input as double " <<e<< endl;
}
catch (...) {
cout << "Wrong " << endl;
}
}
为什么我输入103.1
&amp; 101
,例外情况发送到catch (...)
,而不是相应的catch(float e)
&amp; catch (int e)
。
答案 0 :(得分:2)
130.1
是一个double
字面值,因此您需要一个catch (double)
(如果您想要throw
一个float
,那么请使用{{1} }})。
程序控制永远不会达到throw 130.1f;
,因此throw 101;
是多余的。
答案 1 :(得分:0)
130.1
是double literal,后缀(如果存在)是f,F,l或L之一。后缀确定浮点文字的类型:
(no suffix) defines double f F defines float l L defines long double
您需要将catch (float e)
更改为catch (double e)
。
throw 101;
位于throw 130.1
之后,因此根本无法执行,因此无法进入catch (int e)
阻止。