代码如下:
int main() {
int a, b;
while (cin >> a >> b) {
try {
if (b == 0)
throw runtime_error("Can not divide zero!");
if (a >= 100 || b >= 100)
throw range_error("a and b can not be over 100");
cout << a / b << endl;
} catch(runtime_error err){
cout << err.what() << endl;
cout << "\nTry again? Enter y or n" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;
}
catch (range_error err2) {
cout << err2.what() << endl;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我发现当我输入大于100的数字时,如代码所示,range_error抛出了a .但我想知道为什么它仍然显示"再试一次?输入y或n"并且功能与第一个catch块完全相同.与第二个catch语句一样,没有任何代码告诉用户输入y或n.如果我删除了第一个catch语句中的相关代码,则此消息在range_error发生时不会显示.
顺便说一下,如果try块抛出两个runtime_errors需要不同处理过程的程序,程序将如何判断运行哪个catch语句?
Ano*_*ail 10
你需要首先捕获range_error它,因为它来自runtime_error.追赶runtime_error第一也捕捉range_error.
此外,您应该通过const引用捕获异常.通过按值捕获它们,您正在制作不需要的副本.
我还要补充一点......通常,您不希望使用异常来控制程序流程.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |