2014-03-19 40 views
3

CODE: -关于查询的getch()输入

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

当我在ch=getchar()输入一个字符,我必须按回车键,这仍然是在输入缓冲区。
输入密钥不被ch1=getch()读取。 为什么ch1=getch()未读取剩余的输入密钥?

矛盾这一事实
CODE 2: -

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

在按下其产生两个输出,第一输出被存储在ch和第二输出被存储在一个ch1箭头键。

回答

0

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

每次你按下键增加一个字符到系统缓冲区(shell),但只有当你按下回车这些字符MOVED到C标准缓冲液。

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


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

E.g.

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

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