2

在你开始在我身上浪费时间之前,请记住,这个问题更多的是要知道这次关闭是否足够合法。

好的。

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

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;
    }
}

这是我的命令功能。如您所见,这会将“运行”更改为 0(或 false)。我希望我让这个足够理解。

谢谢。

编辑:我想知道的是,如果这是一个好的方法:)

最后编辑:好的!我改变了“退出(0);” 到“返回(0);”。所以我想这是一个不错的好方法!谢谢你的帮助!:)

4

3 回答 3

4

在程序中使用exit()是合法的。虽然这通常是一个坏主意。但是,如果程序由于某种奇怪的原因而无法返回,您可以这样做。

使用exitinmain()是粗鲁的:我只是想不出一个理智的理由不使用 return 代替。

exit() 和从 main 中返回的区别在于前者会将所有本地对象留在堆栈帧中,从 main 到调用点挂起,不调用析构函数。只有静态/全局对象才能正确关闭。它可能会让代码的某些部分感到惊讶,并且让重要的事情没有完成。

由于 C++ 有很好的异常,我认为最好将 exit() 替换为抛出一些管理到 main 的东西,在那里定期返回。

于 2013-06-28T11:45:24.137 回答
1

但是是没有意义的if (running == 0)

while (running == 1) {
      commands();
}
return 0;

完全一样 - 一旦运行为 0,它就会掉出循环的底部,并且 main 返回。全局的整个想法running正在进入副作用编程,这是一件坏事!

于 2013-06-28T11:35:21.470 回答
0

给定问题中的边界条件,exit() 可以满足您的要求。它正常终止进程,执行定期清理以终止程序(atexit(),在没有自动存储的情况下销毁对象等)。

你真的不想使用全局运行,所以我宁愿建议检查commands()的返回参数。

int commands() 
{
   if(wanna_exit)
      return 1;
   else
      return 0;
}

如果你因为某种原因不能让 commands() 打破 while 循环(例如通过检查返回参数并将运行设置为 0,如果它是 1),并且你想立即退出程序而不是完成对其余部分的评估while 循环然后 exit() 就可以了(尽管在这种特殊情况下 return 更好(因为您在示例中处于 main 状态))。尽量避免以全局方式运行 - 现在可能看起来很无辜,但以后可能会变得卑鄙:)。

于 2013-06-28T11:47:08.273 回答