为什么PgUp(^[[5~)或PgDn(^[[6~)输入在取自getchar时被视为4个字符而不是5个字符?

为什么PgUp(^[[5~)或PgDn(^[[6~)输入在取自getchar时被视为4个字符而不是5个字符?,c,input,io,getchar,C,Input,Io,Getchar,我有一段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从“

我有一段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,那么实际发生了什么? 4个字符是多少

我认为“~”可能被视为哨兵字符或其他什么,但如果我提供“1~”计数是3

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

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


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

好的,我理解^[是单个字符。但是如果我给出^[作为输入,我的代码显示它有2个字符。@Naresh这是因为您正在键入它。请按Esc键,或者按Ctrl-
[
。好的,知道了。非常感谢@chrylisch将您的打印更改为
printf(“%d%d\n”,x++,c)
你会看到发生了什么谢谢你@M.M指出这一点。现在编辑。非常感谢你的建议@M.M现在我知道发生了什么。