首先举一个异常处理的例子:
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{...}对程序异常的处理;
****************************************************************************************************************************************
一:首先通过实例引入:
#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)不显示呢?
★直接点来说就是如何让if()语句中的错误条件被判定成立后,就对程序进行截断而不再继续执行if()语句后面的命令,
这样return就将不会被执行。
- > -> ->
这里将程序进行截断(因为b=0是异常情况,所以称之为异常处理)就要使用到try{...}与catch{...};
二:try{...}与catch{...}的使用
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> 难点解释: