构建命令行应用程序

时间:2009-09-17 23:42:52

标签: c++

如何摆脱(在c ++中)恼人的菜单,如:

(a)做点什么 (b)做点别的事 (c)做第三件事 (x)退出

基本上我希望能够运行程序,然后执行类似“calc 32/5”或“open data.csv”的操作,显然我会编写“calc”和“open”的代码。只是朝着正确的方向推进将是伟大的,我相信我可以把它弄清楚,我只需要一些东西来google-fu。

7 个答案:

答案 0 :(得分:3)

我想你想做这样的事情:

string cmd;
cout << "Enter your command:" << endl;
cin >> cmd;
if(cmd == "open") {
    // read file name and open file
} else if (cmd == "calc") {
    // read and evaluate expression
} ...

虽然取决于您希望命令语言的复杂程度,但更精细的设计(甚至可能使用解析器生成器)可能是合适的。

答案 1 :(得分:2)

您想要的是命令行解析器。我不记得这个名字,但实际上有一个设计模式。但是,this site为您提供了一些可用于编写代码的示例代码。希望这不会给你太多答案:)

答案 2 :(得分:2)

你应该选择The C++ Programming Language,这是 关于C ++的书(还有其他的,但这个很棒)。它有一个示例程序,分布在几个章节中,用于标记化,解析参数和制作计算器。

答案 3 :(得分:0)

不要寻找像a,b等输入,而只是要求通用输入。在空格处拆分输入,在第一个上进行“切换”以匹配函数调用,将其余部分视为参数。

答案 4 :(得分:0)

您的菜单是否基于对getchar()的调用?如果要在处理之前允许输入整行,可以使用fgets()或在C ++中std::getline

答案 5 :(得分:0)

有些人会通过在C ++中添加Python接口来将他们的C ++类定义打包为Python类。

然后他们使用内置的cmd库在Python中编写顶级解释器。

答案 6 :(得分:0)

看看:

  • ANTLR这是一个非常好且简单的解析器,它还可以在C++上生成代码。
  • 您可以查看Natural CLI(java)以获得灵感。 (免责声明:我是该项目的开发者)。