getchar() 与 getch()

来源:互联网 发布:阿里云邮的企业版 编辑:程序博客网 时间:2024/06/05 10:35

网络有许多关于getchar()与getch()这两个函数的差别,但是有一点很少仔细分析;

下面我在vs2010平台举例子来说明:

example_01.c#include<stdio.h>#include<conio.h>int main(void){   char ch;   while((ch=getchar()) != '\n')   {      putchar(ch);   }   return   0;}
一直输入字符,直到“你摁下电脑键盘上的enter键”程序才结束;
example_02.c#include<stdio.h>#include<conio.h>int  main(void){  char  ch;  while((ch=getch()) != '\n')  {    putchar(ch);  }  return  0;}
而这个程序却会陷入死循环,不论你摁什么键,包括“电脑键盘上的enter键”。但是如果你把example_02.c程序中的'\n'换成'\r',那么这个程序在你摁下“你电脑键盘上面的enter键”后跳出while循环,此时,example_01.c与example_02.c功能一样。
现在我们再举两个例子:
example_11.c#include<stdio.h>#include<conio.h>int  main(void){  char ch;  while((ch=getchar()) != '\r')  {    putchar(ch);  }  return  0;}
example_12.c#include<stdio.h>#include<conio.h>int  main(void){   char ch;   while((ch=getch()) != '\r')   {      putchar(ch);   }   return  0;}
example_11.c陷入了死循环,除非你能在“你电脑键盘上面输入'\r'字符”。反正我没有找到。example_12.c可以正常工作,它提示你输入字符,直到你输入“电脑键盘上面的enter键”。
这是为什么呢?理由是:
1:getchar函数从stdin流中读取一个字符,即键盘缓冲区。而getch函数是从键盘直接读取一个字符。
2:在windows操作系统中,“电脑键盘上面的enter”代表两个字符'\r'和'\n','\r'是回车字符,'\n'是换行字符。
3:当你摁下enter键,时,转化为标准的字符流时存储在键盘缓冲区,变成了'\n'字符。但是函数如果直接从键盘读取字符时,字符还没有来得及转换。
这是我的个人理解,如果有不当之处,盼请告知。</span>

0 0
原创粉丝点击