ctrl+z解读
解读如下:
windows对于标准输入中的EOF的处理,实际上是用了一个很不常用的键盘消息,即(ctrl+z)这个组合,当按下这个组合键的时候,会有:WM_KEYDOWN(90),WM_CHAR(26),WM_KEYUP(90),这三个消息。
windows把WM_CHAR这个消息值放到标准输入缓冲区里面去,这时候有两种情况。
第一:
********26**********,也就是在这个ctrl+z对应的键盘WM_CHAR值之前还有值,那么此时getchar读到26的时候不把其认定为EOF,而只是等视为'/n',返回ascii码的26对应的字符(右向箭头),然后忽略后面所有的东西,清空缓冲区,等待下一次的输入。
第二:
26******************,此时缓冲区的第一个值就是26,那么此时认定为EOF,getchar返回EOF。
所以对于下面的输入,有如下结果:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int c;
//characters 0-255
while ((c = getchar())!=EOF)
if(c != '/n')
printf("%d/n",c);
//EOF
printf("End-Of-File/n");
return 0;
}
说白了,系统用了一个很不常用的键盘组合产生的消息值,来代表EOF,然后是否认定为EOF,需要判断出现的位置。
当出想在缓冲区第一个位置的时候,认定为EOF。