首先举一个异常处理的例子:ios
string str = "0123456789"; char ch1 = str[100]; //数组越界,可是不提醒,程序运行当即崩溃 cout << ch1 << endl; char ch2 = str.at[100]; //数组越界,使用成员函数at()来进行异常捕获,程序没法运行 cout << ch2 << endl;
这里C++对指针越界进行了异常处理,使用string类中的at()成员函数进行判别;数组
本篇文章主要介绍在C++中Try{...}Catch{...}对程序异常的处理;函数
****************************************************************************************************************************************spa
#include <iostream> using namespace std; double division(float a,float b) { if (!b) { cout << "除数不能为0 !"; } return a / b; } int main() { float a,b; cout << "Enter A B: "; cin >> a >> b; while(true) { cout << division(a,b) << endl; } return 0; }
可是当除数真的为0的时候,仍然输出了一些咱们不想要的信息,由于最后的函数最后必需要由return返回一个值。 指针
如何让inf、-nan(ind)不显示呢?code
★直接点来讲就是如何让if()语句中的错误条件被断定成立后,就对程序进行截断而再也不继续执行if()语句后面的命令,blog
这样return就将不会被执行。ci
- > -> ->源码
这里将程序进行截断(由于b=0是异常状况,因此称之为异常处理)就要使用到try{...}与catch{...};string
1> 语法结构:
try
{
throw ...
}
catch( ...' type )
{
cout << "Err_infomation! " << endl;
}
2> 上述问题解决方案 (源码):
#include <iostream> using namespace std; double division(float a,float b) { if (!b) { throw "Error! 除数不能为0!"; } cout << "【当b=0的时候,这里是不会执行的】" << endl; return a / b; } int main() { float a, b; while(true) { cout << "Please enter A B : "; cin >> a >> b; try { cout << "A/B= " << division(a, b) << endl; } catch (const char *error) { cout << error << endl; } catch (...) //捕获其余未知错误 { cout << "Unknown Error !" << endl; } } return 0; }
3> 运行结果:
4> 难点解释: