Исключение с плавающей точкой не перехватывается? - PullRequest
0 голосов
/ 01 апреля 2019

У меня проблема с исключением с плавающей запятой. Когда я делю на ноль, я получаю это исключение. Я пытался поймать это, но решения в интернете у меня не работают.

#include<iostream>

using namespace std;

int main(){

double h{0};
int a{0},b{0},c{0};

cin.exceptions(ios_base::failbit);

cout << "Enter Values: ";
try{ 
  cin >> a >> b >> c;  
  h = (3/1/a+1/b+1/c);      

if(a == 0 || b == 0 || c == 0){
 throw overflow_error("Division by zero is not allowed!");
}
  cout << h;
}
catch(overflow_error e){
     cerr << e.what();
 }
 catch(exception& e){
     cerr << "Only numbers!";
 }
 catch(...){
    cerr << "?";
}
return 0;
}

1 Ответ

1 голос
/ 01 апреля 2019

Вы получаете «исключение с плавающей запятой» (которое не является исключением в C ++), поэтому его нельзя перехватить.

https://www.quora.com/Why-isn%E2%80%99t-this-catch-block-in-C++-catching-any-exception

Я предлагаю охрана для проверки ввода.

В вашем коде исключение происходит до того, как вы начнете выбрасывать вещи.

...