exception 异常理解

//异常:exception n.一般情况以外的人;例外,规则的例外;例外的事物;
/*上面是exception的定义,其实这里应该叫做例外,而不是异常,实际上异常并不是本意*/
#include "pch.h"
#include <iostream>
//假如这个函数是库的作者写的,当出现例外的时候,将问题throw,让库的使用者来判断应该如何处理这个exception
void compare_two_number(int a, int b) {
	if (a < 0 || b < 0)
	throw ("std::out_of_range");
	else {
		std::cout << ((a > b) ? a:b) << std::endl;
	}
}
//在没有异常机制情况下的处理方式
void compare_two_num(int a, int b) {
	while (1) {
		int a1, b1;
		a1 = a;
		b1 = b;
		if (a1 < 0 || b1 < 0)
		{
			std::cout << "输入的数字中出现了负数,请重新输入" << std::endl;
			std::cout << "请输入第一个数字的内容" << std::endl;
			std::cin >> a1;
			std::cout << "请输入第二个数字的内容" << std::endl;
			std::cin >> b1;
			compare_two_num(a1, b1);
			break;  //注意:这里如果不加break的话,就算是输入了正确内容并且返回了之后,这里依然会重新执行while循环
		}
		else {
			std::cout <<"两者中比较达到数字为"<<((a > b) ? a : b) << std::endl;
			break;
		}
	}
}
int main()
{
    //exception的尝试
	//这里呢,我是作为库的使用中,所以我要检测这个并处理这个库的问题
	//1.正确情况下,也就是不会引起异常
	compare_two_number(2, 3);
	//2.出现异常但是我没有处理
	//compare_two_number(-1, 3);  //这里运行到这里的时候确实会报出异常,但是和经常写程序时出现的异常不一样,是不是我丢出的exception类型的问题,待会试试编译器自带的
	                             //异常类型
	//3.出现异常并且捕获并处理
	//try {
	//	compare_two_number(-2, 2);
	//}
	//catch (...) {
	//	//...代表能够捕获任何类型的异常
	//	std::cout << "用户输入中出现了负数或者其他问题,请用户重新输入" << std::endl;
	//	int a, b;
	//	std::cout << "请输入第一个数" << std::endl;
	//	std::cin >> a;
	//	std::cout << "请输入第二个数" << std::endl;
	//	std::cin >> b;
	//	compare_two_number(a, b);
	//}
	/*这种方式确实能够捕获并且处理异常,但是只能处理一次*/


	//4.如果用户多次输入错误,这里是处理方式
	try {
		compare_two_number(-2, 2);
	}
	catch (...) {
		//异常存在的本质是为了能够将问题和问题的处理分开,也就是让我们使用者来决定应该如如何处理
		//所以,我们捕获了之后,内部使用类似没有异常机制的语言的方式来处理
		//这里应该用循环来处理问题
		while(1)
		{
			std::cout << "用户输入中出现了负数或者其他问题,请用户重新输入" << std::endl;
			int a, b;
			std::cout << "请输入第一个数" << std::endl;
			std::cin >> a;
			std::cout << "请输入第二个数" << std::endl;
			std::cin >> b;
			if (a < 0 || b < 0) {

			}
			else {
				std::cout << "两个数中比较大的数为" << ((a > b) ? a : b) << std::endl;
				break;
			}
		}
	
		}




	//c语言中没有异常机制时的处理方式
	//compare_two_num(-2, 3);






}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值