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。

posted on 2011-01-30 17:08  IT@民工  阅读(1060)  评论(0编辑  收藏  举报

导航