【问题标题】:Exit Program with Switch Default?使用开关默认退出程序?
【发布时间】:2018-04-17 09:11:54
【问题描述】:

我正在尝试对程序进行编码,以便在输入除 1 或 2 以外的数字时退出。我可以让它显示“退出消息”,但程序重新启动而不是退出。我相信这可能是因为开关默认值中没有“返回 0”,但是当我包含它时,我一直收到 void calcit 的返回错误。我觉得我错过了一些简单的事情。

【问题讨论】:

  • " 但程序重新启动" 事实并非如此。看看这里do { ... } while (true);。你永远不会跳出这个循环,这意味着if(resp != '1' || resp != '2') 是不可访问的。

标签: c++ switch-statement user-defined-functions


【解决方案1】:

程序永不结束的问题是因为你有一个永不结束的循环do {blah blah....} while (true)。要实现你想要的,你需要一个不同的条件:

do { blah blah blah ...} while (resp == '1' || resp == '2');

【讨论】:

    【解决方案2】:

    要退出程序,您应该使用 exit 函数代替 return 0,这也会终止您的循环 Break 不会帮助你,因为你在 switch 块以及 do while 循环中 所以,尝试退出(0);要终止,您还必须包含

    的头文件

    #include<cstdlib. h>

    【讨论】:

    • std::exit<cstdlib> 中,而不是process.h(这根本不是标准标头)。它还终止程序而不展开堆栈,泄漏所有资源。
    • 感谢您的纠正,但我没有得到您所说的泄露所有资源的事情
    • C++ 使用 RAII 来管理资源,析构函数的作用就是释放这些资源。由于std::exit 不调用自动变量的析构函数,因此资源永远不会被释放。
    • 有没有办法在退出函数之前调用析构函数
    • 要么直接让程序流程返回main并正常完成,要么(但我不推荐)throw异常并在main中捕获。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2014-01-31
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多