大家好,请教下,在计算中,当遇到除数为零时,希望程序自动跳过该计算,不让这种情况参与计算,要如何处理呢
我当前是这样进行的,打要出问题:
if (Dlg.m_strX1 <= 0)
{
A1 = 0;
B1 = 0;
}
else
{
A1 = 1;
B1 = 5 * Dlg.m_stru1 / Dlg.m_strX1;
}
如果只是针对除数为0想跳过的话,用if来个选择执行或者用个try-catch-finally捕获异常。
但是针对你的代码,感觉看不出是什么意思啊~
为什么不将if (Dlg.m_strX1 <= 0)中的<去掉呢?其实主要还是看具体的需求....
可以用if循环语句的continue语句,if被除数为零,continue
跳过此次循环
你这个已经跳过了Dlg.m_strX1等于零的情况了
可是我在后面求和时,double AA=A1+A2+A3+A4;
当m_stru1输入整数时则正确,当输入小数时则显示3倍AA的数据呢,不知道原因在哪儿
if (Dlg.m_strX1 <= 0)//编辑对话框输入数据double,如果为零将会形成除数为零的情况,在B1公式中
{
A1 = 0;//计数用
B1 = 0;//计算公式用
}
else
{
A1 = 1;
B1 = 5 * Dlg.m_stru1 / Dlg.m_strX1;
}
用异常处理
C++处理异常的方法 如果在执行一个函数过程中出现异常,可以不在本函数 中立即处理,而是发出一个消息,传给它的上一级来解决, 如果上一级函数也不能处理,就再传给其上一级,如此逐级 上传,如果到最高一级还无法处理,运行系统一般会自动调 用系统函数terminate,由它调用abort终止程序。
C++异常处理机制 C++处理异常的机制由抛出、检查和捕获三部分组成, 分别由三种语句来完成: throw 表达式; 在某种情况下,throw语句中可以不包括表达式; p try(检查): p throw(抛出):使用throw语句,其格式如下: p catch(捕获)
异常的检查和捕获 异常的检查和捕获使用try语句和catch语句,格式如下: try { 被检查的符合语句; } catch(异常类型声明1) { 进行异常处理的复合语句1;} catch(异常类型声明2) { 进行异常处理的复合语句2;} ……
异常处理的说明 将容易引起异常的语句或程序段放在try块的花括号中;
如果在执行try块内的复合语句过程中没有发生异常,则 catch子句不起作用,流程转到catch子句后面的语句继续 执行; p 如果在执行try块内的复合语句过程中发生异常,则throw 语句抛出一个异常信息; pthrow抛出的异常信息传到try_catch结构,系统寻找与之 匹配的catch子句;
异常处理的说明 执行异常处理语句后,程序继续执行catch子句后面的语 句。 一个try_catch结构中只能有一个try,但却可以有多个 catch块,以便与不同的异常信息匹配,catch后边的括号 中,一般只写异常信息的类型名; p 如果在catch子句中没有指定异常信息的类型,而用了三 点删节号“…”,则表示它可以捕获任何类型的异常信息; C++中,一旦抛出一个异常,而程序不捕获的话,那么系 统就会调用一个系统函数terminate,由它调用abort终 止程序。
举两个例子
#例1 处理除数为0的异常。
int Div(int x,int y)
{ if(y==0)
throw y;
return x/y;
} i
nt main()
{ try
{ cout<<"7/3="<<Div(7,3)<<endl;
cout<<"5/10="<<Div(5,10)<<endl;
cout<<"next"<<endl;
}
catch (int) { cout<<"除数为0,错误!"<<endl; }cout<<"End!"<<endl; return 0; }
#例2 求输入数的平方根。
#include<iostream>
#include<cmath>
using namespace std;
double Sqrt(double a)
{ if(a<0) throw 1;
return sqrt(a);
}
int main()
{ int x;
while(1)
{ cout<<"请输入一个数:";
cin>>x;
try{ cout<<x<<"的平方根是:"<<Sqrt(x)<<endl; }
catch(int){ cout<<x<<"是负数,不能求平方根!\n"; exit(0); }
}
return 0; }