getchar()是stdio.h中的库函数,作用是从stdin流中读入一个字符。如果stdin有数据的话不用输入它就可以直接读取了。
stdin是C语言中标准输入流,一般用于获取键盘输入到缓冲区里的东西。
缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
我们为什么要引入缓冲区呢?
比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。
又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。
缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。
访问stdin,可用stdio.h中提供的以下几个函数:
scanf、getchar来从stdin流中获取指定的数据。scanf根据第一个参数指定的格式符将数据读入后续参数指定的内存位置中;getchar从stdin流中读取一个字符并返回。
在C语言中,getchar代表读入一个字符,putchar代表输出一个字符。getchar的用法是输入时直接使用getchar()函数获取字符,putchar的用法是传入字符变量进行打印。
getchar由宏实现:#define getchar() getc(stdin)。getchar有一个int型的返回值,当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。
用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾(End-Of-File)则返回-1(EOF),且将用户输入的字符回显到屏幕。如
用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。
putchar作用是向终端输出一个字符。其格式为putchar(c),其中c可以是被单引号(英文状态下)引起来的一个字符,可以是介于0~127之间的一个十进制整型数,也可以是事先用char定义好的一个字符型变量。
c语言中用getchar()输入字符是回车算一个字符。程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。即回车是用户输入结束的标志,同时也会将回车字符也放在缓冲区中,此时getchar才开始从键盘缓冲区中读取数据,包括回车符。
getchar的两点总结:
1.getchar是以行为单位进行存取的。
当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D,
那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOF,EOF将在后面讨论时, getchar才会停止执行,整个程序将会往下执行。
譬如下面程序段:
while((c = getchar()) != EOF){ putchar(c);}
执行程序,输入:abc,
然后回车。
则程序就会去执行putchar(c),
然后输出abc,
这个地方不要忘了,系统输出的还有一个回车。
然后可以继续输入,再次遇到换行符的时候,程序又会把那一行的输入的字符输出在终端上。
对于getchar,肯定很多初学的朋友会问,getchar不是以字符为单位读取的吗?那么,
既然我输入了第一个字符a,
肯定满足while循环(c = getchar()) != EOF的条件阿,
那么应该执行putchar(c)在终端输出一个字符a。不错,我在用getchar的时候也是一直这么想的,但是程序就偏偏不着样执行,而是必需读到一个换行符或者文件结束符EOF才进行一次输出。
2.getchar()的返回值一般情况下是字符,但也可能是负值,
即返回EOF。
如果觉得文字有些难懂,下面进行图解
这里ch之前定义最好用int,因为通过查函数发现它返回的是一个int型,所以在创建类型的时候就创建int防止后面产生EOF导致程序退出。
这样写可以达到你输入什么他就输出什么的目的。最后想结束程序就输入一个ctrl+z就相当于给程序一个EOF程序就会结束。
在实际写题中有以下应用:
从键盘任意输入一个字符,编程判断是否是字母(包括大小写)
输入包括一个字符。
输出该字符是字母(YES)或不是(NO)。