//异常: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);
}