以下是C++代码,实现从控制台随机输入三个整数,按降序排列输出,并且在输入时捕获可能抛出的异常。
cppCopy code#include <iostream>#include <stdexcept>// 异常头文件#include <algorithm>// STL头文件using namespace stdint main() { int a, b, c try { // 尝试执行输入 *** 作
cout <<"请输入三个整数,用空格隔开:" <<endl
cin >>a >>b >>c if (cin.fail()) { // 如果输入失败,抛出异常
throw runtime_error("输入的不是整数")
}
} catch (runtime_error e) { // 捕获异常并输出错误信息
cerr <<"错误:" <<e.what() <<endl return -1// 返回错误代码
} int arr[3] = {a, b, c} sort(arr, arr + 3, greater<int>())// 使用STL的sort函数进行降序排序
cout <<"排序后的结果为:" <<arr[0] <<" " <<arr[1] <<" " <<arr[2] <<endl return 0// 返回正常退出代码}
解释:
try 块尝试执行输入 *** 作,如果输入失败,则抛出 runtime_error 类型的异常。
catch 块捕获 runtime_error 类型的异常,并输出错误信息。
sort(arr, arr + 3, greater<int>()) 对数组进行降序排序。
cerr 是标准错误流,用于输出错误信息。
what() 方法返回异常对象的错误信息。
先定义一个空的类,该类就可以看作是一个异常类,这个异常类将 抛出和捕捉关联起来,当程序中抛出了一个错误,那么是抛出的错误因为异常类的关联,被捕捉(其实,该异常类的作用就等同于一个标志)
看看具体的使用:
#include<iostream>using namespace std
class wrong{} //异常类
class people
{
public:
people(int i) { len = i pt = new int[len] }
int &operator[](int &r)
int getlen() { return len }
private:
int len
int *pt
}
int &people::operator[](int &r)
{
if (r < len && r >= 0)
return pt[r]
else
throw wrong() //抛出错误
}
int main()
{
people one(20)
try //查找错误
{
for (int i = 0 i < 50 i++) //因为数组的长度在调用构造函数的时候已经将其置为20,那么这里的50超出了数组长度
{
one[i] = i
cout << one[i] << endl
}
}
catch (wrong) //捕获抛出的错误
{
cout << "问题已经得到解决" << endl
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)