满意答案
moruo5256
2013.12.25
采纳率:51% 等级:12
已帮助:19828人
(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值,并由此来结束字符串。
00分享举报