问题描述
我首先在Windows的Ansi C中编写了一个小程序,现在我在Ubuntu上使用内置 GCC对其进行了编译。
该程序很简单:
-
使用
scanf()
从控制台读取该行。 -
分析字符串并计算。
但是有些奇怪的事情发生了。当我尝试移动光标时,它会打印四个字符:
-
按下
Up
将打印“^[[A
” -
按下
Dn
将打印“^[[B
” -
按下
Rt
将打印“^[[C
” -
按下
Lt
将打印“^[[D
”
-
如何避免这种情况?
-
为什么它打印这四个字符而不是移动光标?
最佳办法
因为这就是键盘实际发送到PC的内容(更确切地说,是终端为从键盘实际收到的内容打印的内容)。例如,bash
获取这些值,对其进行解密并了解您要四处移动,因此它将移动光标(在向左/向右的情况下)或使用其历史记录来获取先前的命令(向上/向下)。因此,您不能指望程序神奇地支持箭头键。
但是,从终端的标准输入中读取内容已经支持向左/向右箭头键(我相信,但是我现在不在Linux中进行测试和确定)。所以我的猜测是还有另一个问题在干扰。一个可能的原因可能是您的一个修改键卡住了吗?也许是ALT,CTRL还是SUPER?
次佳办法
对于那些来自osx(mac)的用户,请尝试将shell更改为bash
Terminal -> Preferences -> Shells open with -> [select] Command (complete path)
然后贴上
/bin/bash