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