代码如下:
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; }
我发现当我输入大于100的数字时,如代码所示,range_error
抛出了a .但我想知道为什么它仍然显示"再试一次?输入y或n"并且功能与第一个catch块完全相同.与第二个catch语句一样,没有任何代码告诉用户输入y或n.如果我删除了第一个catch语句中的相关代码,则此消息在range_error
发生时不会显示.
顺便说一下,如果try块抛出两个runtime_errors
需要不同处理过程的程序,程序将如何判断运行哪个catch语句?
你需要首先捕获range_error
它,因为它来自runtime_error
.追赶runtime_error
第一也捕捉range_error
.
此外,您应该通过const引用捕获异常.通过按值捕获它们,您正在制作不需要的副本.
我还要补充一点......通常,您不希望使用异常来控制程序流程.