C++ 异常捕捉与处理(try...catch...)

版权声明:转载请注明出处 https://blog.csdn.net/qq_42292831/article/details/84876789

首先举一个异常处理的例子:

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> 难点解释:

猜你喜欢

转载自blog.csdn.net/qq_42292831/article/details/84876789