为什么PgUp(^ [[5~)或PgDn(^ [[6~)输入从getchar中被认为是4个字符而不是5个?

时间:2015-12-28 03:14:30

标签: c input io getchar

我有这段C代码

#include"stdio.h"

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

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

对于任何正常输入,例如 - single char'a',它会读取2个字符'a'和'\ n'。所以计数是2.我明白了。

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

5来自“^ [[5~”,1来自'\ n'终结者。

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

我认为'〜'可能会被视为哨兵角色或其他东西,但如果我提供“1~”则数量为3。

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

1 个答案:

答案 0 :(得分:1)

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

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