ITPub博客

首页 > Linux操作系统 > Linux操作系统 > getchar()知多少?

getchar()知多少?

原创 Linux操作系统 作者:licup123 时间:2010-12-25 15:39:10 0 删除 编辑

getc():
调用方式:int getc(FILE *stream)
它返回指定输入流stream的当前位置的下一个字符,并增加文件的位置指示器.

getch():
调用方式:int getch(void)
getch()从控制台读取一个字符,但不把该字符显示在屏幕上,也就是不回显.

getche():
调用方式:int getche(void)
getchar()从控制台读取一个字符,把该字符显示在屏幕上,也就是回显.

getchar():
调有方式:int getchar(void)
getchar()从控制台读取一个字符,并回显,它和getch(),getche()的不同在于,它等到输入一个回车才结束,就算你输入了一个字符串,它也只取其中的第一个字符.





void main()
{
  char c, ch;
  c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/
  putchar(c); /*输出该字符*/
  ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/
  putchar(ch);
  printf("\n\n");
}

  值得注意的是前面两个函数都是从键盘读入数据!

  还有getchar是很值得研究的:getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了。而getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符。getchar带有显示。

  与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束(前提是缓冲区没有数据),回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

#include
#include
void main()
{
  char c;
  c=getchar(); /*从键盘读入字符直到回车结束*/
  //getchar()在这里它只返回你输入字符串的第一个字符,并把返回值赋值给c
  putchar(c); /*显示输入的第一个字符*/
  printf("\n\n");
}

例四:呵呵,这个程序你运行一下,相信你又会有疑问了。这个就是从缓冲区中读取了例子。第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。

#include

#include

void main()

{

  char c;

  while ((c=getchar())!='\n') /*每个getchar()依次读入一个字符*/

  printf("%c",c); /*按照原样输出*/

  printf("\n\n");

}

程序运行时,首先停下来,等你输入一串字符串,输入完毕后,它把你输入的整个字符串都输出来了,咦,你不是说getchar()只返回第一个字符么,这里怎么?

因为我们输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的内存中,就好比,开闸放水,我们把水放到闸里去以后,开一次闸就放掉一点,开一次就放掉一点,直到放光了为止,这里开闸动作就相当于调用一次getchar()。我们输入的字符串也是这么一回事,首先我们输入的字符串是放在内存的缓冲区中的,我们调用一次getchar()就把缓冲区中里出口最近的一个字符输出,也就是最前面的一个字符输出,输出后,就把它释放掉了,但后面还有字符串,所以我们就用循环把最前面的一个字符一个个的在内存中释放掉,直到不满足循环条件退出为止。

例子中循环条件里的'\n'实际上就是你输入字符串后的回车符,所以意思就是说,直到遇到回车符才结束循环,而getchar()函数就是等待输入(或缓冲区中的数据)直到按回车才结束,所以实现了整个字符串的输出。当然,我们也可以把循环条件改一下,比如while ((c=getchar())!='a'),什么意思呢,意思就是遇到字符'a'就停止循环,当然意思是如果你输入“12345a213123\n”那么只会输出到a,结果是12345a。

再次注意:用getchar()它是从“流”中间去读取,所以第一个getchar()接受的是刚刚中断的流队列中即将出列的第一个字符(不限于回车符,上面举过例子了),如果流队列不为空,执行getchar()就继续放水,直到把回车符也放空为止,空了之后再在执行getchar()就停下等待你的输入了;我们用getch()为什么每次都是等待用户的输入呢?因为getch()是从键盘接收,即时的接收,并不是从stdin流中去读取数据。

  补充:按键盘上的回车产生了2个字符:回车符('\r')和换行符('\n')。回车符'\r'(CR:carriage return:倒车)使光标回到这行的首部,换行符('\n')(new line)然后再换行。

  所以当输入字符'w',并按下回车键以后。首先得到回车符。那个getchar函数结束了。 但是还存在一个换行符。所以如果用getchar()来做判断的时候。最好再写一次getchar()清除缓冲区的'\n'.

 

getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回- 1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说, 后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
  getch与 getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用 getch函数暂停程序运行,当按任意键后程序继续运行.
getch()、getche()和getchar()函数

(1) getch()和getche()函数
 这两个函数都是从键盘上读入一个字符。其调用格式为:
  getch(); 
  getche();
 两者的区别是:getch()函数不将读入的字符回显在显示屏幕上,而getche() 函数却将读入的字符回显到显示屏幕上。 

  例1:
  #include"stdio.h"
  #include"conio.h"
  void main()
  {
  char c, ch;
  c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/
  putchar(c); /*输出该字符*/
  ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/
  putchar(ch);
  }

 利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停等功能。 
  例2: 
  #include"stdio.h"
  #include"conio.h"
  void main() 
  {
  char s[20];
  printf("Name:");
  gets(s);
  printf("Press any key to continue...");
  getch(); /*等待输入任一键*/
  } 
  
(2) getchar()函数
 getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

  例3: 
  #include"stdio.h"
  #include"conio.h"
  void main() 
  {
  char c;
  c=getchar(); /*从键盘读入字符直到回车结束*/
  putchar(c); /*显示输入的第一个字符*/
  getch(); /*等待按任一健*/
  } 

  例4:
  #include"stdio.h"
  #include"conio.h"
  void main() 
  {
  char c;
  while ((c=getchar())!='\n') /*每个getchar()依次读入一个字符*/
  printf("%c",c); /*按照原样输出*/
  getch(); /*等待按任一健*/ 
  }


 编程中,以防程序运行一闪即失,总是要在最后来一个“getch();”
 getch()和getche()需要"conio.h"

附:
getch 从键盘无回显地读一字符
调用格式 #include"stdio.h"
  int getch(void);
原型在 conio.h
说明 getch从键盘直接读一个字符,不回显到屏幕上。
返回值 getch返回从键盘所读的字符。
可移植性 getch只适用于DOS

getchar 从stdin流中取字符
调用格式 #include"conio.h"
  int getchar(void);
原型在 stdio.h
说明 getchar是一个宏,用于返回指定的stdin输入流的下一个字符, 它定义为getc(stdin)。
返回值 调用成功时,getchar返回所读的字符,它已被转换为无符号扩展的整形值。在遇到文件结束或出错时,返回EOF。
可移植性 getchar适用于UNIX系统,在ANSI C中定义,与Kernighan和Ritchie的定义兼容

其他相关链接
stdio.h中声明的是标准输入输出函数,一般在各种系统上都能使用。
io.h中声明的是类UNIX输入输出函数,在DOS,windows下虽然能编译过去,但不起作用。
conio.中声明的是类DOS输入输出函数,有些好像在UNIX下可以用,比如getch,记得以前好像在unix上用过。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10697500/viewspace-682595/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-06-22

  • 博文量
    51
  • 访问量
    117113