在你开始浪费我的时间之前,请记住,这个问题更多的是关于知道这种关闭是否合法。
好的。
我读了各种关闭程序的方法。我知道最终关闭程序总是最好的!所以正如我所说,我阅读了各种主题,但我找不到一个我理解正确的主题。所以我有点想出了自己的方式。我只是想确保它是一个好的方法。
int main()
{
cout << "Welcome to my fantastic program!" << endl;
cout << "You're the first one to experience my command program!" << endl;
cout << "Let's try with a simple command. Try typing help" << endl;
while (running == 1) {
commands();
if (running == 0) {
exit(0);
}
}
return 0;
}
所以我希望你专注于while循环。这是我的方法。
void commands()
{
cin >> command;
if (command == "help")
{
cout << "-------------------------------" << endl;
cout << "-this is the <HELP> section----" << endl;
cout << "-exit (exits the program.)" << endl;
cout << "-Stay tuned for more commands--" << endl;
cout << "-------------------------------" << endl;
}
else if (command == "exit")
{
running = 0;
}
else
{
cout << "The command does not exist: " << command << endl;
}
}
这是我的命令功能。如您所见,这会将“running”更改为0(或false)。我希望我能够理解这一点。
感谢。
编辑:我想知道的是,如果这是一个好的方法:)
最终编辑:好吧!我改变了“退出(0);” “return(0);”。所以我想这是一个不错的方法!谢谢你的帮助! :)
答案 0 :(得分:4)
在程序中使用exit()
是合法的。虽然这通常是一个坏主意。但是如果程序由于一些奇怪的原因而无法退回,那么你就可以做到。
在exit
中使用main()
是非常粗鲁的:我无法想到一个明智的共鸣,而不是使用返回。
exit()和main返回的区别在于前者会将堆栈帧中的所有本地对象从main挂到调用点,析构函数不会被调用。只有静态/全局对象才能正常关闭。它可能会让代码的某些部分感到惊讶,并且还会留下重要的事情。
由于C ++有很好的例外,我认为最好将exit()替换为抛出管理到main的东西,定期返回。
答案 1 :(得分:1)
if (running == 0)
但是毫无意义!
while (running == 1) {
commands();
}
return 0;
完全相同 - 一旦运行为0,它就会落在循环的底部,并且主要返回。全局running
的整个想法正在进入副作用编程,这是一件坏事!
答案 2 :(得分:0)
考虑到问题exit()中的边界条件,你做了什么。它正常终止进程,执行常规清理以终止程序(atexit(),销毁没有自动存储的对象等)。
你真的不想使用全局运行,所以我宁愿建议检查命令()的返回参数。
说
int commands()
{
if(wanna_exit)
return 1;
else
return 0;
}
如果你出于某种原因不能让command()破坏while循环(例如通过检查返回参数并将运行设置为0,如果它是1),并且你想立即退出程序而不是完成评估while循环的其余部分然后exit()是正常的(虽然在这种特殊情况下返回更好(因为你在示例中是main))。试着避免像全球一样运行 - 现在可能看起来很无辜,但以后可能会变得卑鄙:)。