如何在控制台应用程序中创建命令历史记录

How to make command history in console application?

本文关键字:创建 命令 历史 记录 应用程序 控制台      更新时间:2023-10-16

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

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

p.p.S.我使用Linux和C++

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

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

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

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