我先在Windows上用Ansi C编写了一个小程序,现在我在Ubuntu上用内置的GCC编译了它.

程序很简单:

  • scanf()从控制台读这句话.
  • 分析字符串并计算.

但是奇怪的事情发生了.当我try 移动光标时,它会打印四个字符:

  • 向上打印"^[[A"
  • Dn打印"^[[B"
  • Rt打印"^[[C"
  • Lt打印"^[[D"

  • 如何避免这种情况?

  • 为什么打印这4个字符而不是移动光标?

推荐答案

因为这就是键盘实际发送到PC的内容(更准确地说,终端打印的内容是它实际从键盘接收到的内容).例如,bash获取这些值,对其进行解密,并理解您想要四处移动,因此它要么移动光标(在左/右的情况下),要么使用其历史记录获取以前的命令(向上/向下).所以你不能指望你的程序神奇地支持箭头键.

However,从终端的标准输入读取已经支持左/右箭头键(我相信,但我现在不在Linux中进行测试和确认).所以我猜还有另一个问题在干扰.一个可能的原因可能是你的某个修改键卡住了?也许是ALT、CTRL或SUPER?

C++相关问答推荐

如何将一个enum类型类型转换为另一个类型?

strftime函数中%s的历史意义是什么?为什么没有记录?

如何启用ss(另一个调查套接字的实用程序)来查看Linux主机上加入的多播组IP地址?

如果我释放其他内容,返回值就会出错

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

非正规化边缘毛刺

试图从CSV文件中获取双精度值,但在C++中始终为空

是否可以通过调用两个函数来初始化2D数组?示例:ARRAY[STARTING_ROWS()][STARTING_COLUMNS()]

在编写代码时,Clion比vscode有更多的问题指示器

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

C代码可以在在线编译器上运行,但不能在Leetcode上运行

初始成员、公共初始序列、匿名联合和严格别名如何在C中交互?

int * 指向int的哪个字节?

C++中PUTS函数的返回值

表达式x&;&;(~x)应该返回1还是0?它依赖于编译器吗?

意外的C并集结果

`%%的sscanf无法按预期工作

我的代码可以与一个编译器一起使用,但不能与其他编译器一起使用

execve 不给出which命令的输出

为什么需要struct in_addr