2016-08-26 12 views
0
#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; 
    } 
} 

を識別するために失敗したことを、なぜ私の代わりに、それぞれのcatch(float e) & catch (int e)catch (...)に行くをキャッチ103.1 & 101、例外を入力するとき。失敗はC++で例外をキャッチするには、次の例外タイプ

+0

次に、複数のデータ型の例外を処理するにはどのようにすればよいのですか?それぞれの型には一意の例外メッセージが表示されますか?ありがとう。 –

答えて

2

130.1あなたは(あなたがfloatその後throw 130.1f;を使用throwしたい場合は)そのいずれかのcatch (double)を必要とするので、リテラルdoubleです。

プログラム制御がthrow 101;に決して達しないので、catch (int)は冗長です。

+0

次に、複数のデータ型の例外を処理するにはどのようにすればよいのですか?ありがとう。 –

0
  1. 130.1、Fのいずれか、F、L、又はLである。存在する場合、サフィックスはリテラル浮動小数点のタイプを決定する、double literal

サフィックスである。

あなたが catch (double e)catch (float e)を変更する必要が
(no suffix) defines double 
f F defines float 
l L defines long double 

  • throw 101;throw 130.1後に配置されているので、catch (int e)ブロックを入力することは不可能次いで、まったく実行されないであろう。