当处理控制台输入(stdin,std :: cin)时,C ++中有一种可移植的方式来管理用户可能执行的各种操作:
例如在windows中使用std :: cin时(例如:std :: cin>> s;),它允许使用箭头键,但是当在linux上使用相同的代码时,会假设箭头键作为输入的一部分,光标不会移动。
我知道各种TUI框架,比如提供此类功能的curses和ncurses,但它们不仅仅是所需的。
我希望有一个基于标准库的简单解决方案,或者甚至是一个轻量级的开源库,它可能具有类似std :: getline的功能,可以在更流行的操作系统中移植。
答案 0 :(得分:1)
退格和删除等内容通常由。处理 系统;当您从终端读取时,您只能获得输入 当用户按下回车键时。
系统的作用通常相当有限。特别是,
我不知道有任何文件名完成之类的事情。
如果超过系统所需要的,我会建议
查看许多GNU程序使用的readline
库
(bash,gdb等)。它可以单独购买
使用它的应用程序。 (两个小警告:我不知道
它对本机Windows的支持有多好,我不确定
它所属的许可证是:GPL或LGPL。)
答案 1 :(得分:0)
readline是Linux的不错选择,但它是GPL!我使用以下代码在Windows和Linux上编译:
#ifdef USE_READLINE
#include <readline/readline.h>
#include <readline/history.h>
#endif
...
void getline(char *buf)
{
#ifdef USE_READLINE
char *tmp;
tmp = readline(PROMPT);
if(strncmp(tmp, buf, MAXLENGTH)) add_history(tmp); // only add new content
strncpy(buf, tmp, MAXLENGTH);
buf[MAXLENGTH]='\0';
free(tmp);
#else
std::cout<<PROMPT;
std::cin.get(buf,MAXLENGTH);
std::cin.ignore(); // delete CR
#endif
}