C ++关闭程序的方法

时间:2013-06-28 11:31:16

标签: c++ console-application dev-c++

在你开始浪费我的时间之前,请记住,这个问题更多的是关于知道这种关闭是否合法。

好的。

我读了各种关闭程序的方法。我知道最终关闭程序总是最好的!所以正如我所说,我阅读了各种主题,但我找不到一个我理解正确的主题。所以我有点想出了自己的方式。我只是想确保它是一个好的方法。

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);”。所以我想这是一个不错的方法!谢谢你的帮助! :)

3 个答案:

答案 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))。试着避免像全球一样运行 - 现在可能看起来很无辜,但以后可能会变得卑鄙:)。