当前位置:  开发笔记 > 编程语言 > 正文

C++尝试块和异常处理

如何解决《C++尝试块和异常处理》经验,为你挑选了1个好方法。

代码如下:

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语句?



1> Anon Mail..:

你需要首先捕获range_error它,因为它来自runtime_error.追赶runtime_error第一也捕捉range_error.

此外,您应该通过const引用捕获异常.通过按值捕获它们,您正在制作不需要的副本.

我还要补充一点......通常,您不希望使用异常来控制程序流程.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有