【发布时间】:2013-09-01 14:12:18
【问题描述】:
我想制作交互式控制台应用程序,它允许循环输入命令。例如,用户键入“搜索”,程序会找到一些数据并将其打印在屏幕上。然后程序等待下一个命令(可以是搜索、退出或其他)。为了用户的方便,我希望我的程序支持命令历史记录(比如在终端中,当按下键盘上的向上和向下箭头时)。但我不知道该怎么做,因为我不知道如何打印可以被 scanf、std::getline、std::cin 等进一步阅读的文本。
所以代码std::cin << "hello"; 没有被编译('std::cin fprintf(stdin, "hello"); 不打印任何内容,scanf 无法读取此打印消息。显然std::getline(std::cin, str);和scanf("%s", s);和gets(s)等无法读取printf或std::out输出的文本。所以问题是:如何在控制台上打印文本,这些文本也将在stdin (std::cin) 中?或者也许有更优雅的方式来组织命令历史?
附:我也想过模拟按下按钮来打印我需要的文本,但我希望有更好的方法来制作命令历史
附言我使用 Linux 和 C++
【问题讨论】:
-
当您记得标准 I/O 在没有屏幕但有打印机的 systemw 上启动时,它会有所帮助。
printf字面印刷文字。要使用scanf将其读回,需要人工操作员将实际的纸张输出馈送到扫描仪。
标签: c++ linux console terminal