循环回命令C ++

时间:2016-11-21 18:06:14

标签: c++ compare

我想到了一个非常简单的程序,如果输入错误的命令,它会循环回“命令”功能。 在继续开发基于文本的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;
    }
}

1 个答案:

答案 0 :(得分:0)

显然你的例子非常简单(例如你需要提供某种“退出”命令),但它显示的模式完全没问题。像这样的循环是游戏开发者通常称之为“游戏循环”和GUI程序员称之为“事件循环”的本质。对于每个需要保持运行的程序来说,这是一个基本模式,直到明确告知停止与执行其工作然后自动结束相反。

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

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

int main()
{
    QApplication app;
    MainWindow win;
    win.show();
    return app.exec();  // <-- main loop happens here
}

Offtopic:关于

if (!command().compare("help"))

行...这些的行真的让我感到烦恼。 ;)不要这样写!这是非常误导的,因为直觉 - 特别是在快速扫描代码时 - 它显示:如果命令不是“帮助”,那么“命令帮助存在!”;而自然反应是:WTF!?总是拼出你要比较的价值,以明确发生了什么:

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

或事件更好,因为在这种情况下,您需要的所有信息都是相同或不同的:

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