Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止箭头键';s在C中制作外壳时输出原始字符,如^[[A_C_Shell - Fatal编程技术网

防止箭头键';s在C中制作外壳时输出原始字符,如^[[A

防止箭头键';s在C中制作外壳时输出原始字符,如^[[A,c,shell,C,Shell,我正在实现一个类似于shell的程序,其中用户输入命令(由我定义) >cmd result blah blah blah > 当我使用箭头键时,它会输出原始字符,如^[[A >^[[A 我还注意到sqlite3的行为至少在我在计算机上编译的版本中是这样的 如何防止这种情况,并让键左右移动光标?要让用户使用键盘箭头在cmd中导航,您可能必须使用termcaps 如果你想更容易处理有点复杂的术语上限,你应该使用Ncurses 如果你选择了这个解决方案,那就麻烦了。是一个专门

我正在实现一个类似于shell的程序,其中用户输入命令(由我定义)

>cmd
result blah blah blah
>
当我使用箭头键时,它会输出原始字符,如
^[[A

>^[[A
我还注意到sqlite3的行为至少在我在计算机上编译的版本中是这样的


如何防止这种情况,并让
键左右移动光标?

要让用户使用键盘箭头在cmd中导航,您可能必须使用
termcaps

如果你想更容易处理有点复杂的术语上限,你应该使用
Ncurses

如果你选择了这个解决方案,那就麻烦了。

是一个专门为这个任务设计的库(也就是说,允许用户编辑在交互式命令驱动程序中键入的命令)。请注意,这个库是在GPL(而不是LGPL)下分发的;如果这对您不起作用,则是一个具有BSD样式许可证的类似库


我注意到你说这是家庭作业,所以你可能想问你的老师你是否需要自己实现光标运动和线编辑。如果是这样,ncurses(正如jDourlens所提到的)是抽象方面的下一步,如果你真的想自己做每件事,请阅读(现在使用的几乎所有终端仿真器都模拟VT220或其后代之一)。

我发现了一种稍微简单的方法。运行
rlwrap[您的程序]
而不是
[您的程序]

例如,它可以与
sqlite3
配合使用,因为
rlwrap sqlite3
您可以查看。它是一个库,可以让您控制终端中的几乎所有内容。您需要的特定函数是
noecho()
,它可以阻止终端显示用户的输入