关于getch()输入的查询

时间:2014-03-19 10:00:41

标签: c shell buffer getchar getch

代码: -

char ch,ch1;
ch=getchar();
ch1=getch();
printf("%c\n%c",ch,ch1);

当我在ch=getchar()期间输入一个字符时,我必须按回车键,它仍然保留在输入缓冲区中 ch1=getch()无法读取该输入密钥。 为什么ch1=getch()没有读取剩余的回车键?

与此事实相矛盾 代码2: -

char ch,ch1;
ch=getch();
ch1=getch();
printf("%c\n%c",ch,ch1);

当我按下产生两个输出的箭头键时,第一个输出存储在ch中,第二个输出存储在ch1中。

1 个答案:

答案 0 :(得分:0)

标准C输入功能仅在您按 Enter 键时开始处理您键入的内容。

您按下的每个键都会在系统缓冲区(shell)中添加一个字符,但只有当您按 Enter 时,这些字符才会 MOVED 到C标准缓冲区

因此在ch = getchar();之后,C缓冲区包含换行符,系统缓冲区为空。 (getch(),它不是标准函数,将读取系统缓冲区。)


在第二个示例中,getch()函数返回特殊密钥的多个密钥代码(getch()未标准化,这些代码可能会有所不同)。

E.g。

  • MinGW / Visual C ++(conio.h):两个密钥代码。首先是0x00或0xE0,然后是识别按下的键的代码。
  • GCC(termios.h):三个密钥代码。首先是' \ 033' (ESC),然后' [' ,最后识别按键的代码。

无论如何只使用getch()你正在读取系统缓冲区中的所有字符(不强制转移到C标准缓冲区)。