无法捕获c ++中的异常:无法识别异常类型

时间:2016-08-26 08:11:04

标签: c++ exception try-catch throw

#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)

2 个答案:

答案 0 :(得分:2)

130.1是一个double字面值,因此您需要一个catch (double)(如果您想要throw一个float,那么请使用{{1} }})。

程序控制永远不会达到throw 130.1f;,因此throw 101;是多余的。

答案 1 :(得分:0)

  1. 130.1double literal
  2.   

    后缀(如果存在)是f,F,l或L之一。后缀确定浮点文字的类型:

    (no suffix) defines double
    f F defines float
    l L defines long double
    

    您需要将catch (float e)更改为catch (double e)

    1. throw 101;位于throw 130.1之后,因此根本无法执行,因此无法进入catch (int e)阻止。