代码: -
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
中。
答案 0 :(得分:0)
标准C输入功能仅在您按 Enter 键时开始处理您键入的内容。
您按下的每个键都会在系统缓冲区(shell
)中添加一个字符,但只有当您按 Enter 时,这些字符才会 MOVED 到C标准缓冲区
因此在ch = getchar();
之后,C缓冲区包含换行符,系统缓冲区为空。 (getch()
,它不是标准函数,将读取系统缓冲区。)
在第二个示例中,getch()
函数返回特殊密钥的多个密钥代码(getch()
未标准化,这些代码可能会有所不同)。
E.g。
conio.h
):两个密钥代码。首先是0x00或0xE0,然后是识别按下的键的代码。termios.h
):三个密钥代码。首先是' \ 033' (ESC),然后' [' ,最后识别按键的代码。无论如何只使用getch()
你正在读取系统缓冲区中的所有字符(不强制转移到C标准缓冲区)。