C++ 退出C++;控制台程序

C++ 退出C++;控制台程序,c++,function,validation,quit,C++,Function,Validation,Quit,我目前有一个程序,其基本结构如下 主要功能 --向用户显示菜单选项 --通过将用户输入传递给第二个函数(input\u validator)来验证用户输入 --如果用户选择选项1,则运行函数1,以此类推 功能1、2、3等 --输入由用户请求,然后由输入验证器验证 --若输入验证器返回true,我们就知道输入是好的 这是我的问题。我想允许用户通过键入“0”在程序内的任何时间退出。我计划在input_validator中使用一些基本代码(如果input=0,等等)来实现这一点 这看起来很简单,但有人

我目前有一个程序,其基本结构如下

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

功能1、2、3等 --输入由用户请求,然后由输入验证器验证 --若输入验证器返回true,我们就知道输入是好的

这是我的问题。我想允许用户通过键入“0”在程序内的任何时间退出。我计划在input_validator中使用一些基本代码(如果input=0,等等)来实现这一点

这看起来很简单,但有人告诉我,使用quit()将导致一些资源从未被释放/等等。我也不能简单地进行“中断”——这将导致我的程序简单地返回到主函数

有什么想法吗?

正常终止进程, 执行的定期清理 终止进程

首先,由 对atexit的调用在 他们的注册顺序相反。 然后,所有流都关闭,并且 临时文件被删除,最后 控件将返回到主机 环境


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

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

对于任何一种主流操作系统,这种情况已经很久没有出现了。操作系统确保释放所有内核资源,即使程序没有显式地这样做。从代码中的任何地方调用ABORT()或ExITE()都很好。

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


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

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

退后一步,看看大局,退绕技术看起来非常类似于C++异常处理策略。我建议对不遵循正常执行流程的情况使用异常,例如主菜单和上一个菜单


试一下。

自从我在C++编程,有没有一个好的教程,你知道的例外?@ BSCLIKE:可能是最好的例外教程(虽然可能比你需要的更详细)是例外的C++,由Habor萨特。这是他本周的老导师Usenet文章的材料扩展,可在.donot use exit,use exceptions获得,更多信息,请查看此链接。我不同意这里的人建议使用异常进行流控制。请看,这是在告诉您实际释放回的内容,而不是可能留下的内容:命名管道、应该在退出之前删除的非临时文件(即,某些进程将pid存储在linux中的文件中,该文件不是临时文件,但应在程序退出时删除)。。。OP程序中可能没有问题,但仍然存在。一些移动操作系统在处理这一问题时仍然存在问题,并且操作系统无法知道需要释放哪些资源。如果程序创建了命名管道或文件,其持续时间应仅为程序生命周期(即某些linux应用程序中的pid文件)、备份文件(即某些编辑器和文字处理器中的文件)。。。