我想制作交互式控制台应用程序,它允许在循环中输入命令。例如,用户键入“搜索”和程序查找一些数据并将其打印在屏幕上。然后程序等待下一个命令(可以是搜索,退出或其他)。为了方便用户,我希望我的程序支持命令历史记录(如在键盘上按向上和向下箭头时在终端中)。但我无法实现如何做到这一点,因为我不知道如何打印文本,可以通过scanf,std :: getline,std :: cin等进一步阅读。
因此,代码std::cin << "hello";
未编译(与'std :: cin&lt;&lt;&lt;“hello”'中的'运算符&lt;&lt;'不匹配)。函数fprintf(stdin, "hello");
不打印任何内容,scanf无法读取此打印消息。很明显,std::getline(std::cin, str);
和scanf("%s", s);
以及gets(s)
等无法读取printf
或std::out
输出的文字。所以问题是:如何在控制台上打印文本,该文本也将在stdin
(std::cin
)中?或者也许有更优雅的方式来组织命令历史记录?
P.S。我还想过按模式按下来打印我需要的文字,但我希望有更好的方法来制作命令历史
P.P.S。我使用Linux和C ++
答案 0 :(得分:3)
使用完全为此目的制作的readline
and history
libraries。
答案 1 :(得分:1)
如果您不想使用Kerrek SB建议的库,您可能会想到另一个方向:
1)历史中应该有哪些命令? - &GT;所有命令,用户键入。 2)你怎么知道,用户键入了什么? - &GT;你从std :: in得到它 3)你如何处理命令,你从std :: in获得? - &GT;您可以处理它们(例如,当用户键入&#39;搜索&#39;)
时开始搜索除了步骤3,您还可以存储用户在内部键入的命令(例如,在某种矢量中)。如果现在您的用户想要使用命令历史记录并按下“键盘”键。 (或&#39;按键&#39;)您只需在内部向量中查找相应的命令即可。他按下'进入&#39;然后?只需处理命令,即从内部命令历史中选择的用户。