【问题标题】:Why PgUp(^[[5~) or PgDn(^[[6~) input are considered 4 characters instead of 5 when taken from getchar?为什么从 getchar 获取 PgUp(^[[5~) 或 PgDn(^[[6~) 输入被视为 4 个字符而不是 5 个字符?
【发布时间】:2015-12-28 03:14:30
【问题描述】:

我有这段 C 代码

#include"stdio.h"

main()
{
    int x;
 char c;
    for(x=1;(c=getchar())!=EOF;printf("%d ",x++));
}

它打印从到 1 到 n 的 x,其中 n 是 getchar() 从标准输入中获取的第 n 个字符。

对于任何普通输入,如 - 单个字符 'a',它读取 2 个字符 'a' 和 '\n'。所以计数是 2。我明白了。

但是,当我从键盘按 PgUp 或 PgDn 时,终端有 "^[[5~" 或 "^[[6~" 字符流,所以输出计数应该是 6。

5 来自 "^[[5~" 和 1 来自 '\n' 终止符。

但计数只有 5,那么实际发生了什么? ^[[5~怎么是4个字符?

我认为 '~' 可能被视为标记字符或其他东西,但如果我提供“1~”,则计数为 3。

友情提示 - 我有被阻止再提问的危险。我搜索了答案,但找不到。如果您认为必须删除此问题,请在 cmets 中告诉我。

【问题讨论】:

  • 将您的打印更改为printf("%d %d\n", x++, c);,您将看到发生了什么
  • 感谢@MM 指出这一点。现已编辑。
  • 非常感谢@M.M 的建议,现在我知道发生了什么。

标签: c input io getchar


【解决方案1】:

插入符号 (^) 传统上用于打印没有标准视觉表示的 ASCII 控制字符。 ^[ 是单个字符,ESC (0x1b)。

请注意,您可以打印出您读取的每个字符的数值,以查看是否有任何意外(在这种情况下,您会发现与显示不匹配的低值)。

【讨论】:

  • 好的,我知道 ^[ 是一个字符。但是如果我给 ^[ 作为输入,我的代码说它有 2 个字符。
  • @Naresh 那是因为您正在键入它。请按 Esc 键,或 Ctrl-[
  • 好的,知道了。非常感谢@chrylis
猜你喜欢
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2021-10-31
  • 2019-08-04
  • 1970-01-01
  • 2012-07-06
  • 2014-11-30
  • 2019-09-01
相关资源
最近更新 更多