C++如何使用try-catch
最近在做那个银行家算法,因为要输入的东西太多了,且还要保持程序的鲁棒性,所以想到用try-catch语句来捕捉输入异常,我的意图是用catch来捕捉输入异常,并且让用户重新输入!应该要如何实现?
最近在做那个银行家算法,因为要输入的东西太多了,且还要保持程序的鲁棒性,所以想到用try-catch语句来捕捉输入异常,我的意图是用catch来捕捉输入异常,并且让用户重新输入!应该要如何实现?
答案:/// 资源数public static int resourceNumber;
/// 进程数
public static int processNumber;
/// 可用资源数组
public static int[] Available;
/// 工作向量
public static int[] work;
/// 它表示系统是否有足够的资源分配给进程
public static bool[] Finish;
/// 最大需求矩阵
public static int[][] Max;
/// 分配矩阵
public static int[][] Allocation;
/// 需求矩阵
public static int[][] Need;
/// 安全序列
public static int[] SafeSequence;
/// 资源请求向量
public static int[] Request;
算法思想:
主要是:递归+深度优先搜寻+回溯
算法源代码如下:
/// 深搜+回溯实现银行家算法
/// <param name="n">已完成的进程数</param>
public void DFS_searchSafeSequence(int n)
{
if (n == processNumber)
{
//找到一个安全序列,可以显示所有安全序列
//显示在richTextBoxshow.Text上
for (int i = 0; i < processNumber; i++)
{
richTextBoxshow.Text += SafeSequence[i] + " ";
}
richTextBoxshow.Text += "\n";
return;
}
for (int i = 0; i < processNumber; i++)
{
if (Finish[i] == false)//进程尚未完成
{
//判断现有资源是否可以满足这个进程
bool isOK = true;
for (int j = 0; j < resourceNumber; j++)
{
if (Need[i][j] > work[j])
{
isOK = false;
break;
}
}
//可以满足
if (isOK)
{
//先试探的将资源分配给这个进程
for (int j = 0; j < resourceNumber; j++)
{
work[j] += Allocation[i][j];
}
//已经完成
Finish[i] = true;
//加入安全序列
SafeSequence[n] = i;
//继续搜索
DFS_searchSafeSequence(n+1);
//回溯
Finish[i] = false;
SafeSequence[n] = -1;
for (int j = 0; j < resourceNumber; j++)
{
work[j] -= Allocation[i][j];
}
}
}
}
}
用try catch来实现重新输入好像不是太合理
捕获到异常后 一般不会尝试继续执行失败的方法
给你个例子看看吧
#include <iostream>
using namespace std;
int main()
{
cin.exceptions(ios::failbit);
int i;
try
{
cin >> i;
}
catch(std::ios_base::failure e)
{
cout<<"输入错误"<<endl;
}
}try
{
代码
}catch(...)//这里的...三个点是任何错误的意思
{
这里写错误
}
哥你烧糊涂了吧
上一个:ping的C++代码及释义
下一个:c++如何获取当前系统名称