一、实验目的:
1、理解C++语言的异常处理机制;
2、正确使用异常处理方法:异常捕获与异常抛出;
3、学习以Exception为基类的异常继承体系和自定义异常类的
二、实验环境:
1、 PC计算机一台;
2、 Dev-C++开发环境。
三、实验原理:
- try-catch-finally处理异常:
try{
//正常数据处理但可能会发生异常的程序代码
}
Catch(异常类型1 e){
//捕获并处理try抛出的异常类型1
}
Catch(异常类型2 e){
//捕获并处理try抛出的异常类型2
}
…
Catch(异常类型n e){
//捕获并处理try抛出的异常类型n
}
}
四、实验内容:
1、键盘输入6个整数,放入数组中并输出,输入不为整数会产生输入格式不正确异常,捕获并显示:请输入整数,输入个数超过6个会产生数组越界异常,捕获并显示:请不要超出6个元素。
2、请编写一个判断是否为等差数列的方法void dengcha(int a,int b,int c),判断输入的三个参数能否构成一个等差数列,如果不能则抛出异常,并显示显示异常:“a,b,c无法构成等差数列”,在主方法中调用此方法,并捕获异常。
五、实验代码及结果(程序运行结果请以截屏图给出):
- 键盘输入6个整数,放入数组中并输出,输入不为整数会产生输入格式不正确异常,捕获并显示:请输入整数,输入个数超过6个会产生数组越界异常,捕获并显示:请不要超出6个元素。
#include<iostream>
#include<string.h>
using namespace std;
void Exception(char (&a)[100]){
if (strlen(a)>6){
throw "数组越界异常";
}
for (int j = 0; j < strlen(a); j++){
if(a[j]>'9'||a[j]<'0'){
throw "数组输入异常";
}
}
}
int main (){
char t;
do{
try{
cout<<"输入char arr[6](0-9,空格隔开):"<<endl;
char arr[100]={};//数组初始化
int i=0;
while(cin>>arr[i]){//输入字符空格隔开
cout<<arr[i]<<" ";//打印输入的数组
i++;
if(getchar()=='\n'){//'\n'结束输入
break;
}
}
cout<<endl;
Exception(arr);
}catch(const char* mesg){
cerr<< mesg <<endl;
}
cout<<endl<<"是否重新输入?(Y/N):";cin>>t;
} while (t=='y'||t=='Y');
cout<<"exit!"<<endl<<endl;
system("pause");
return 0;
}
- 请编写一个判断是否为等差数列的方法void dengcha(int a,int b,int c),判断输入的三个参数能否构成一个等差数列,如果不能则抛出异常,并显示显示异常:“a,b,c无法构成等差数列”,在主方法中调用此方法,并捕获异常。
#include<iostream>
#include<string.h>
using namespace std;
void isArithmetic(int a,int b,int c){
if (c-b!=b-a){
throw "a,b,c无法构成等差数列";
}else{
throw "a,b,c可以构成等差数列";
}
}
int main(){
char t;
do{
try{
cout<<"输入等差数列(a b c):"<<endl;
int a,b,c;
cin>>a>>b>>c;
isArithmetic(a,b,c);
cout<<endl;
}catch(const char* mesg){
cerr<< mesg <<endl;
}
cout<<endl<<"是否重新输入?(Y/N):";cin>>t;
} while (t=='y'||t=='Y');
cout<<"exit!"<<endl<<endl;
system("pause");
return 0;
}
六、实验小结:
C++ 引入了异常处理机制。其基本思想是:函数 A 在执行过程中发现异常时可以不加处理,而只是“拋出一个异常”给 A 的调用者,假定为函数 B。拋出异常而不加处理会导致函数 A 立即中止,在这种情况下,函数 B 可以选择捕获 A 拋出的异常进行处理,也可以选择置之不理。如果置之不理,这个异常就会被拋给 B 的调用者,以此类推。如果一层层的函数都不处理异常,异常最终会被拋给最外层的 main 函数。main 函数应该处理异常。如果main函数也不处理异常,那么程序就会立即异常地中止。