一、gechar()
1、概念
getchar()函数从键盘上读入一个字符,并显示该字符(回显)【敲什么键盘上就会显示什么】,但只有第一个字符作为函数的返回值。
通常这样调用: char ch;
ch=getchar(); 等同于scanf("%c",&ch);
getchar()函数的括号中没有参数,该函数的输入一直到回车才结束。回车前输入的字符都会逐个显示到屏幕上,但只有第一个字符作为返回值。
#include<stdio.h> #include<stdio.h>
int main(void) int main(void)
{ {
char ch; char ch;
ch=getchar();//输入abc,输出为a while((ch=getchar())!='#')
putchar(ch); {
return 0; putchar(ch);
} return 0;
}//输入abc,输出abc,当输入'#'时,结束
在第二个程序中我们会输入一串字符,回车,屏幕上会显示我们输入的一串字符。这时候会有疑问,明明getchar()函数只显示一个字符,为什么它却把输入的都显示出来了?这需要涉及缓冲区。
输入可以分为非缓冲输入和缓冲输入。
非缓冲输入:输入字符的立即回显 (输入的内容对程序立即可用)
缓冲输入:输入的字符被收集并储存在一个被称为缓冲区的临时存储区域中。当按下回车键时,使所键入的字符块对程序变为可用。
缓冲分为两类:完全缓冲的行缓冲
完全缓冲:缓冲区满时被清空(文件输入)
行缓冲:遇到一个换行字符时将被清空缓冲区(键盘输入时,按下回车键将清空缓冲区)
对于getchar()函数
当我们从键盘输入一堆字符时,这堆字符被存储在缓冲区中,当我们按下回车键时,就开始调用getchar()函数,把缓冲区最先存储的字符读取,并且把这个字符从缓冲区中清除。然后利用循环继续读取,释放。最后满足条件为止。在上一个例子中while((ch=getchar())!='#')指的是当缓存区中的数据碰到‘#‘后就结束输出。但我们也会碰到while((ch=getchar())!='\n')的情况,这里的意思是在缓冲区中遇到‘\n’就结束循环,而getchar()函数就是等待输入缓冲区中的数据 直到按回车(‘\n’)才结束,这样的话缓冲区就留下了‘\n’,这时候可以用getchar();函数把缓存区中剩余清空(过滤掉回车)。