3

代码:-

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

当我在 期间输入一个字符时ch=getchar(),我必须按 enter 键,该键仍保留在输入缓冲区中。
该输入键不被ch1=getch(). 为什么ch1=getch()不读取剩余的回车键?

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

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

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

4

1 回答 1

0

标准 C 输入函数仅在您按下键时才开始处理您输入的内容Enter

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

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


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

例如

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

无论如何,仅使用getch()您正在读取系统缓冲区中的所有字符(不强制传输到 C 标准缓冲区)。

于 2014-04-11T11:12:35.333 回答