try语句块和异常处理
- try语句块内声明的变量在块外部无法访问。特别是在catch子句内也无法访问。
- 当异常被抛出时,首先搜索离他最近的catch子句,如果找不到程序转到名为terminate的标准库函数。
5.6.3节练习
练习5.23:编写一段程序,从标准输入中读取两个整数输出第一个除以第二个数的结果。
#include <iostream>
#include <stdexcept>
using namespace std;
int main(void)
{
int n1, n2;
cin >> n1 >> n2;
cout << n1 / n2 << endl;
return 0;
}
练习5.24:修改你的程序,使得当第二个数是0时抛出异常项不要设定catch子句。
#include <iostream>
#include <stdexcept>
using namespace std;
int main(void)
{
int n1, n2;
cin >> n1 >> n2;
if (n2 == 0)
throw runtime_error("Data must refer to same ISBN");
cout << n1 / n2 << endl;
return 0;
}
练习5.25:修改上一题的程序,使用try语句去捕获异常。catch子句应该为用户输出一条提示信息,询问其是否输入新数并重写执行try语句块的内容
#include <iostream>
#include <stdexcept>
using namespace std;
int main(void)
{
int n1, n2;
while (cin >> n1 >> n2)
{
try
{
if (n2 == 0)
throw runtime_error("Data must refer to same ISBN");
cout << n1 / n2 << endl;
}
catch(runtime_error err)
{
cout << err.what()
<< "\nTry Again? Enter y or n" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;
}
}
return 0;
}