c++Primer第五版练习 5.23 5.24 5.25

 
题目:

5.23

编写一段程序,从标准输入读取两个整数,输出第一个数除以第二个数的结果。

5.24

修改你的程序,使得当第二个数是0时抛出异常。先不要设定catch子句,运行程序并真的为除数输入0,看看会发生什么?

5.25

修改上一题的程序,使用try语句块去捕获异常。catch子句应该为用户输出一条提示信息,询问其是否输入新数并重新执行try语句块的内容。

 
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int data1,data2;
while(cin>>data1>>data2)
{
try    //异常处理
{
     if(data2==0)
      {
          throw runtime_error("除数不能为0\n");   //使用throw检测异常,可以说throw raise 异常
     }
 
     cout<<data1/data2<<endl;
}
catch(runtime_error err)
{
     cout<<err.what()<<"请重新输入"<<endl;
}
}
    return 0;
}
 
 

/*一个程序中出现多个异常如何处理*/
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int data1,data2;
while(cin>>data1>>data2)
{
try
{
if(data2==0)   
{
throw runtime_error("除数不能为0\n");   //第一个异常:除数为0
}
else if(!(data2>=1&&data2<=9))  
{
throw exception("除数不在1到9之间\n");  //第二个异常:除数不在1-9之间 ,自添加,主要是判断多个catch的使用
}
cout<<data1/data2<<endl;
}
catch(runtime_error err)
{
cout<<err.what()<<"请重新输入"<<endl;  //前面的err.what()是为了提供关于异常的文本信息
}
catch( exception err )
{
cout<<err.what()<<"请重新输入"<<endl;
}
}
    return 0;
}
 

 

 
 
问题:多个异常的处理
 
<stdexcept>定义的异常类:
exception                  最常见的问题
runtime_error           只有在运行时才能检测出的问题
range_error              运行时错误,生成的结果超出了有意义的值域范围
overflow_error         运行时错误;计算上溢
underflow_error       运行时错误;计算上溢
logic_error                程序逻辑错误
domain_error           逻辑错误: 参数对应的结果值不存在
invalid_argument     逻辑错误: 无效参数
length_error             逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range           逻辑错误:使用一个超出有效范围的值

posted on 2017-03-09 09:36  whitem  阅读(519)  评论(0编辑  收藏  举报