防止箭头键';s在C中制作外壳时输出原始字符,如^[[A
我正在实现一个类似于shell的程序,其中用户输入命令(由我定义)防止箭头键';s在C中制作外壳时输出原始字符,如^[[A,c,shell,C,Shell,我正在实现一个类似于shell的程序,其中用户输入命令(由我定义) >cmd result blah blah blah > 当我使用箭头键时,它会输出原始字符,如^[[A >^[[A 我还注意到sqlite3的行为至少在我在计算机上编译的版本中是这样的 如何防止这种情况,并让键左右移动光标?要让用户使用键盘箭头在cmd中导航,您可能必须使用termcaps 如果你想更容易处理有点复杂的术语上限,你应该使用Ncurses 如果你选择了这个解决方案,那就麻烦了。是一个专门
>cmd
result blah blah blah
>
当我使用箭头键时,它会输出原始字符,如^[[A
>^[[A
我还注意到sqlite3的行为至少在我在计算机上编译的版本中是这样的
如何防止这种情况,并让
键左右移动光标?要让用户使用键盘箭头在cmd中导航,您可能必须使用termcaps
如果你想更容易处理有点复杂的术语上限,你应该使用Ncurses
如果你选择了这个解决方案,那就麻烦了。是一个专门为这个任务设计的库(也就是说,允许用户编辑在交互式命令驱动程序中键入的命令)。请注意,这个库是在GPL(而不是LGPL)下分发的;如果这对您不起作用,则是一个具有BSD样式许可证的类似库
我注意到你说这是家庭作业,所以你可能想问你的老师你是否需要自己实现光标运动和线编辑。如果是这样,ncurses(正如jDourlens所提到的)是抽象方面的下一步,如果你真的想自己做每件事,请阅读(现在使用的几乎所有终端仿真器都模拟VT220或其后代之一)。我发现了一种稍微简单的方法。运行
rlwrap[您的程序]
而不是[您的程序]
例如,它可以与sqlite3
配合使用,因为rlwrap sqlite3
您可以查看。它是一个库,可以让您控制终端中的几乎所有内容。您需要的特定函数是noecho()
,它可以阻止终端显示用户的输入