C++ 循环返回到命令C++;

C++ 循环返回到命令C++;,c++,compare,C++,Compare,我想到了一个非常简单的程序,如果输入了错误的命令,它会循环回“command”函数。 在继续开发基于文本的rpg游戏并以此为基础之前,我想知道,像我下面所做的那样将main的大部分作为while循环是否是一个坏主意,或者是否有一种更简单的方法来调用函数并将用户放回main的顶部,以检查字符串比较,而不使用“goto”选项非常感谢您的期待 std::string command() { std::string input; std::cout << "$home: ";

我想到了一个非常简单的程序,如果输入了错误的命令,它会循环回“command”函数。 在继续开发基于文本的rpg游戏并以此为基础之前,我想知道,像我下面所做的那样将main的大部分作为while循环是否是一个坏主意,或者是否有一种更简单的方法来调用函数并将用户放回main的顶部,以检查字符串比较,而不使用“goto”选项非常感谢您的期待

std::string command()
{
    std::string input;
    std::cout << "$home: ";
    std::cin >> input;
    return input;
}

int main()
{
    while (true)
    {
        if (!command().compare("help"))
        {
            std::cout << "Command HELP exists!\n";
        }
        else
        {
            std::cout << "You have entered an unrecognized command.\n";
        }
        continue;
    }
}
std::string命令()
{
std::字符串输入;
std::cout>输入;
返回输入;
}
int main()
{
while(true)
{
如果(!command().compare(“help”))
{

std::cout显然,您的示例非常简单(例如,您需要提供某种“退出”命令),但它显示的模式完全正确。这样的循环是游戏开发人员通常称之为“游戏循环”和GUI程序员称之为“事件循环”的本质这是每个程序的基本模式,它需要一直运行,直到明确要求停止,而不是执行其工作,然后自动结束

随着程序的增长,在主循环之前会有一些启动代码,在主循环之后会有一些拆卸代码,循环本身可能会从
main()
移动到另一个文件。下面是一个使用Qt框架的简单示例,它显示了一个GUI主循环

#include <QApplication>
#include <MainWindow.hpp>

int main()
{
    QApplication app;
    MainWindow win;
    win.show();
    return app.exec();  // <-- main loop happens here
}
行…像这样的行真的让我讨厌。;(不要这样写!这是非常误导人的,因为直觉上——特别是在快速扫描代码时——它的内容是:如果命令不是“帮助”,那么“命令帮助存在!”;自然的反应是:WTF!?请始终列出您要比较的值,以清楚发生了什么:

if (command().compare("help") == 0) // ...
或者事件更好,因为在这种情况下,您需要的所有信息是否相等:

if (command() == "help") // ...

您的Else是不必要的,因为如果不输入if,它将立即执行另一个循环。我对代码做了一点更改,以使其更清楚。当玩家在执行初始命令后输入下一个命令时,它将始终循环回开始处。需要Else声明该命令是否存在。这是一种错误做法吗?Don“通常不使用”while true“,但在这种情况下,我认为它可以正常工作。这确实是有争议的,取决于人。如果你真的想说你的程序可以无限运行,这是可以接受的。如果你认为它需要一个退出条件,那么它应该被更改(比如退出命令)@DeanHampson
继续;
是多余的。谢谢贝聿铭!这的确是真的。删除了x)我会删除非主题部分。它完全是基于观点的。他写的方式完全可以接受,也很容易阅读。
if (command() == "help") // ...