退出C ++控制台程序

时间:2010-02-16 06:10:35

标签: c++ function validation quit

我目前有一个具有以下基本结构的程序

主要功能    - 向用户显示菜单选项    - 通过将用户输入传递给第二个函数(input_validator)来验证用户输入    - 如果用户选择选项1,则运行功能1等

function1,2,3等    - 从用户请求输入,然后由input_validator验证    - 如果input_validator返回true,我们知道输入是好的

这是我的问题。我希望允许用户通过键入“0”在程序中的任何位置退出。我计划在input_validator中使用一些基本代码(如果输入= 0等)。

这看起来很简单,但我被告知使用quit()会导致某些资源从未被释放/等等。我不能简单地做一个'休息' - 这将导致我的程序只是返回到主要功能。

有什么想法吗?

6 个答案:

答案 0 :(得分:4)

exit()

  

正常终止该过程,   执行常规清理   终止过程。

     

首先,注册的所有功能   对atexit的调用是在。中执行的   他们的注册顺序相反。   然后,所有流都关闭了   临时文件已删除,最后   控件返回给主机   环境。

答案 1 :(得分:4)

一种可能性是通过抛出你在main中捕获的异常来做到这一点,当你捕获它时,你退出程序。抛出异常的好处是它允许析构函数运行以清理已创建的对象,如果您直接从其他地方退出(例如,使用exit()),则不会发生这种情况。

答案 2 :(得分:3)

长期以来,任何一种主流操作系统都不是这样。操作系统确保释放所有内核资源,即使程序没有明确地这样做。从代码中的任何地方调用abort()或exit()都可以。

答案 3 :(得分:1)

exit(int exitCode) - 在stdlib.h / cstdlib中定义 - 你可能想要退出(0); //正常终止。

答案 4 :(得分:0)

exit()不会调用析构函数,因此您可能需要考虑使用异常处理程序。

如果您有类似打开但未刷新的文件,操作系统将关闭文件句柄,但不会刷新任何未写入的数据。

答案 5 :(得分:0)

您必须设计菜单系统,以便状态可以传递回上一个方法,然后展开,直到执行main函数中的代码。类似问题适用于后退上一屏幕按钮。

退一步看一下 Big Picture ,展开技术与C ++异常处理策略非常相似。对于不遵循正常执行流程的情况,我建议使用例外,例如主菜单上一级菜单< / em>的

尝试一下。