运行 C++ 程序时退格键不起作用

运行 C++ 程序时退格键不起作用

每当我使用 ./a.out 在 bash 中运行 ac/c++ 程序时,输入输入时无法退格。相反,我得到了一个带有问号的盒子。

答案1

带问号的框听起来像 Unicode 替换字符。在这种情况下可以显示:

  • 终端使用UTF-8编码,
  • 有人使用 UTF-8 编码输入了多字节字符,
  • 收到退格键(或任何可能的术语)键,但是
  • 仅有的部分角色的,即最后一个字节被终端驱动程序删除,并且
  • 要求(重新)显示的终端只有一个不完整的字符,并且
  • 显示替换字符:

Unicode 字符 '替换字符' (U+FFFD)

iutf8虽然 Linux 内核多年来一直支持标志,但这并不是标准化的,并且通常在其他系统上不可用(OSX 有它, 顺便一提)。另外(即使支持)它也有可能被关闭。

进一步阅读:

任何 POSIX 系统的 tty 驱动程序都支持“煮熟了”模式,其中可以使用一些原始行编辑功能。为了使字符擦除功能(按退格键时激活)能够与 UTF-8 正常工作,需要告诉它不要将 0x80-0xBF 范围内的连续字节计为字符,而是将它们作为一部分删除UTF-8 多字节序列。由于内核不了解 libc 区域设置机制,因此需要另一种机制来告诉 tty 驱动程序正在使用 UTF-8。 Linux 内核版本 2.6 或更高版本在c_iflagstruct termios 的成员变量中支持位 IUTF8 。如果设置了,“cooked”模式行编辑器将正确处理 UTF-8 多字节序列。可以从命令 shell 设置此模式“stty iutf8”。当在 UTF-8 语言环境中调用时,Xterm 和朋友应该自动设置该位。

答案2

这是预期的行为。

Backspace键不是用于删除,而是用于退格。

如果您想删除字符,请使用DEL键。

相关内容