5

我想制作交互式控制台应用程序,它允许循环输入命令。例如,用户键入“搜索”,程序会找到一些数据并将其打印在屏幕上。然后程序等待下一个命令(可以是搜索、退出或其他)。为了用户的方便,我希望我的程序支持命令历史记录(比如在终端中,当按下键盘上的向上和向下箭头时)。但我不知道该怎么做,因为我不知道如何打印可以被 scanf、std::getline、std::cin 等进一步阅读的文本。所以代码std::cin << "hello";没有被编译('std::cin << "hello"' 中的 'operator<<' 不匹配)。函数fprintf(stdin, "hello");不打印任何内容,并且 scanf 无法读取此打印的消息。很明显,std::getline(std::cin, str);andscanf("%s", s);等等gets(s)可以'printfstd::out。所以问题是:如何在控制台上打印也将在stdin( std::cin) 中的文本?或者也许有更优雅的方式来组织命令历史?

PS我也想过模拟按下按钮来打印我需要的文本,但我希望有更好的方法来制作命令历史

PPS 我使用 Linux 和 C++

4

2 回答 2

3

使用readlinehistory,它们正是为此目的而制作的。

于 2013-08-29T08:35:45.787 回答
1

如果您不想使用 Kerrek SB 建议的库,您可能会考虑另一个方向:

1)历史记录中应该有哪些命令?-> 所有命令,用户键入。2) 你怎么知道用户输入了什么?-> 你从 std::in 得到它 3) 你用命令做什么,你从 std::in 得到它?-> 你处理它们(例如,当用户输入“搜索”时开始搜索)

除了第 3 步之外,您还可以只存储用户在内部键入的命令(例如,在某种向量中)。如果现在您的用户想要使用命令历史并按下“向上键”(或“向下键”),您只需在内部向量中查找相应的命令。之后他按“输入”?只需处理命令,用户从您的内部命令历史中选择。

于 2013-08-29T08:47:25.167 回答