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           逻辑错误:使用一个超出有效范围的值

转载于:https://www.cnblogs.com/whitewn/p/6524086.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值