浮点异常无法捕获?

时间:2019-04-01 09:05:44

标签: c++ exception floating-point

我对浮点异常有疑问。当我被零除时,我得到这个异常。我试图抓住它,但是互联网上的解决方案对我不起作用。

#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 个答案:

答案 0 :(得分:1)

您将收到一个“浮点异常”(这不是C ++异常),这就是为什么它不可捕获的原因。

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

我建议guarding进行输入验证。

在您的代码中,异常发生在您开始扔东西之前。