异常和错误输入的问题

来源:互联网 发布:python一般用来做什么 编辑:程序博客网 时间:2024/06/07 07:06
今天编了一个小程序测试异常,结果出现了一点问题,百思不得其解。开始怀疑是cin带来的问题,后来发现也不是。于是在CSDN里面提了一个问题,没想到晚上自习回来就有高手帮我解决了,感谢CSDN里面的高手!为了以后不再犯同样的错误,我把这个错误记下来:经验:不要在catch块里面抛异常!但是在try嵌套的时候可以在内部try后面的catch块里面抛出异常,但是要求外部try块后面的catch块有与内部try块相匹配的异常处理模块。========================================主  题:异常和错误输入的问题!【100求教】作  者:Herowuking () 等  级:信 誉 值:100所属论坛:C/C++ C++ 语言问题点数:100回复次数:6发表时间:2007-7-19 17:25:03最近在学习C++,编了一个小程序用来测试异常,但是出现了一些奇怪的错误,希望高手指点迷津!测试环境:VC 6.0 [已打Sp6补丁]问题说明:程序编译和运行都正常,但是在故意输入字母让它出现异常的时候第一次可以捕捉到并且处理了,第二次再输入字面引发异常的时候就会弹出一个错误提示!"Debug error""abnormal program termination."希望高手帮我看一下是为什么?我的注释如果不正确还望高手指出来:)源代码://///////////////////////////////////////////////////////////////头文件:Exception.h---定义类CTest#ifndef EXCEPTION_H_ #define EXCEPTION_H_#include using std::cout;using std::endl;using std::cin;class CTest{public:enum {ArrSize = 10};//利用枚举为数组设置一个长度值int *pIntArray;/*定义一个整型指针,将用来指向new分配的整型数组*/CTest();//构造函数原型~CTest();//析构函数原型void Input() throw(char*);//输入成员函数原型void Output();//输出成员函数原型};#endif///////////////////////////////////////////////////////////////源文件:Exception.cpp---类CTest的实现文件#include "Exception.h"CTest::CTest(){pIntArray = new int[ArrSize];/*用new动态创建一个整型数组*/for (int a=0;a>pIntArray[i])) {//如果输入了非法字符出错之后,抛出异常cin.clear();//清除错误输入流特征,如果没有这两句第一次异常就无法捕获cin.ignore();//丢弃上次回车符以前的所有输入throw "illegal input!Please try again:/n";//抛出异常}}cout<<"Input complete./n";}void CTest::Output(){cout<<"-------------------------------------------------./n";cout<<"The numbers you just input are:/n";for (int i=0;iusing std::cin;using std::cout;using std::endl;int main(){CTest t;char quit;do{try{t.Input();t.Output();}catch (const char* s) {cout<>quit;}while(quit != 'n' && quit != 'N');return 0;}===================================================taodm的回复:呃,C++规定,在catch里再抛异常的话,程序立即崩溃。要玩异常,还是先认真看点书吧。比如C++ Primer---------------------------------------juicee的回复:你第二次输入的函数input是在catch到异常后的异常处理块中了,而不是try块中。所以第二次输入抛出的异常当然是unhandled了……如果把catch块里的input函数再加个try处理,还是可以catch到的。(juicee的方法在我的例子中不能解决问题)===================================================在高手的指点下,我把catch块中的t.Input();//重新提示用户输入数组元素t.Output();//如果用户输入完成,打印所有刚才的输入换成continue就搞定了:)herouwking2007.07.19今天BJ生日,Happy Birthday!
原创粉丝点击