getch()、getche()和getchar()函数

转载 2013年12月04日 22:30:48
 getch()、getche()和getchar()函数 
    (1) getch()和getche()函数 
    这两个函数都是从键盘上读入一个字符。其调用格式为: 
     getch(); 
     getche(); 
    两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche() 
函数却将读入的字符回显到显示屏幕上。 
    例1: 
     #include<stdio.h> 
     main() 
     { 
          char c, ch; 
          c=getch();     /*从键盘上读入一个字符不回显送给字符变量c*/ 
          putchar(c);    /*输出该字符*/ 
          ch=getche();   /*从键盘上带回显的读入一个字符送给字符变量ch*/ 
          putchar(ch); 
     } 
    利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停 
等功能。 
    例2: 
     #include<stdio.h> 
     main() 
     { 
          char c, s[20]; 
          printf("Name:"); 
          gets(s); 
          printf("Press any key to continue..."); 
          getch();  /*等待输入任一键*/ 
     } 
  
    (2) getchar()函数 
    getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数 
的区别在于: getchar()函数等待输入直到按回车才结束,  回车前的所有输入字 
符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。 
    getchar()函数的调用格式为: 
     getchar(); 
    例3: 
     #include<stdio.h> 
     main() 
     { 
          char c; 
          c=getchar();   /*从键盘读入字符直到回车结束*/ 
          putchar(c);    /*显示输入的第一个字符*/ 
          getch();       /*等待按任一健*/ 
     } 
例4
#include<stdio.h> 
     main() 
     { 
          char c; 
          while ((c=getchar())!='\n')   /*每个getchar()依次读入一个字符*/
          printf("%c",c);    /*按照原样输出*/
          getch();       /*等待按任一健*/ 
     }

(1) int getchar(void)

函数每次从stdin缓冲区读入一个字符遇到回车返回,并且回车也被存入缓冲区,所以getchar可以用来吃掉回车符。 函数返回读到的第一个字符的ASC码值,如果失败则返回-1 其定义为宏定义,即 #define getchar() getc(stdin) 因为是宏定义函数,所以getchar不支持指针的引用。 

现在解释跳过第二个输入的原因,假如我们第一次输入a按回车,这时候我们getchar实际上将a字符和回车放入了缓冲区中,并返回第一个字符的值,然后第二个getchar函数直接从缓冲区继续去字符,拿到了回车,没有需要用户再输入 所以很多人把getchar用来吃掉回车符,起到类似清空缓冲区的原因。清空缓冲区还可以使用fflush函数,但是这个函数不是C标准库中的函数,有时候是无效的。

刚才说到了getchar的定义,其实就是getc函数的一种特殊的情况,下面介绍getc函数。

(2) int getc(FILE* stream) 也是采用的宏定义,所以不支持函数指针调用。 #define getc(_stream) (--(_stream)->_cnt >= 0 ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream)) getc从指定的流中读取一个字符,刚才的getchar实际上就是getc(stdin) ,stdin是标准输入流,C在stdio.h中定义了三个流,也可以理解为是缓冲区。

#define stdin (&_iob[0]) //标准输入,一般指向键盘 #define stdout (&_iob[1]) //标准输出 #define stderr (&_iob[2]) //错误流

基本实现过程

在这里再补充两个函数,简单带过,因为getch和getche不是C标准的库函数。

(3) int getch(void) 从命令行读取一个字符,不显示在命令行,很多人用来模拟“按任意键继续的效果”

(4) int getche(void) 从命令行中读取一个字符,显示在,命令行,与getch一样不是标准C函数库中的函数,在Windows平台下包含与conio.h中,在linux下与之相对的是curses.h库,但是在cygwin模拟的UNIX和ubuntu linux下gcc编译器均无法使用。

本文的最后介绍一下gets函数,他从流中读取字符串直到遇到换行符或者EOF或者遇到错误.

(5) char* gets(char* buffer)

从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。[1]

getch(),getchar(),getche()函数

1.关于getch() getchar() getche()         getch():     所在头文件:conio.h     函数用途:从控制台读取一个字符,但不显示在屏幕上 ...

getche getch getc getchar几个函数

有关getche getch getc getchar几个函数的区别[C](摘抄) getc():  调用方式:int getc(FILE *stream)  它返回指定输入流stream的当前...

区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets函数

转: http://blog.csdn.net/digu/article/details/5578821   //-----------------------------------------...
  • sergery
  • sergery
  • 2012年02月14日 17:05
  • 535

一些读取字符函数小结(getchar getch getche)

getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab) 是stdio.h中的库函,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输...

getch()、getche()和getchar()函数的详细区别

getch()、getche()和getchar()函数 (1) getch()和getche()函数   这两个函数都是从键盘上读入一个字符。其调用格式为:    getch();    g...

getch()getchar() getche()函数详解

关于c语言中的getch(),getchar() getche()函数肯定十分困扰大家,今天将他们整理和大家一起分享 getchar() 头文件:stdio.h   功  能:从I/O流中读...

getch getche getchar的区别和缓冲区的概念

getch getche getchar的区别和缓冲区的概念    今天同学问我一个问题,.Net上编译C程序最后的结果总是一闪而过。记得有个函数能够实现其功能,于是分不清这几个函数之间的关系,总结...

getch getche getchar的区别和缓冲区的概念

getch getche getchar的区别和缓冲区的概念    今天同学问我一个问题,.Net上编译C程序最后的结果总是一闪而过。记得有个函数能够实现其功能,于是分不清这几个函数之间的关系,总结...

区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets

区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets 首先,这两个函数不是C标准库中的函数, int getch(void)    //从标准输入读...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:getch()、getche()和getchar()函数
举报原因:
原因补充:

(最多只允许输入30个字)