getchar()
getchar int getchar(void )
对应头文件:<stdio.h>
函数功能:从缓冲区中获取一个字符。
返回值:如果读取成功,则返回字符的ASCII值。
如果读取失败,则返回EOF,对应的整形值-1。
如果标准输入在文件结束处,该函数返回EOF并设置stdin的EOF指示符(feof)。
如果发生了其他的读取错误,函数也会返回EOF,但会设置它的错误指示符(ferror)。
EOF : end of file->文件的结束标志。
注意:为什么getchar的返回值我们不用char类型接收呢,因为字符在内存中本质上也是以对应ASCII码值存储的,并且如果getchar读取失败会返回-1,这并不能用char来接收,所以我们可以用一个整型来接收getchar的返回值。
这时候就有彦祖要问了,缓冲区是什么呢?
缓冲区
什么是缓冲区
缓冲区是指在内存中开辟出来的一块空间,用于存储输入或输出流中的数据。在C语言中,输入流和输出流都有自己的缓冲区。
当我们使用scanf()函数从标准输入流(例如键盘)读取数据时,输入的字符会先被存储在输入流的缓冲区中,直到遇到换行符或文件结束符。而当我们使用printf()函数向标准输出流(例如屏幕)写入数据时,输出的字符会先被存储在输出流的缓冲区中,直到缓冲区满或者我们手动刷新缓冲区。
getchar()函数可以帮助我们从输入流缓冲区中读取一个字符,并返回该字符的ASCII码值。如果输入流缓冲区为空,则getchar()函数会一直等待用户输入字符。
为啥要设置缓冲区
设置缓冲区的主要目的是为了提高程序的效率。
在C语言中,输入和输出操作通常都需要与外部设备进行通信,例如键盘、屏幕、磁盘等。这些设备的速度较慢,而CPU的处理速度很快,如果每次输入和输出操作都直接与外部设备进行通信,将会导致程序的执行速度非常慢。
因此,在C语言中引入了缓冲区机制,可以将多次输入和输出操作的数据先存储在内存中的缓冲区中,当缓冲区被填满或者需要将缓冲区中的数据发送到外部设备时,再将缓冲区中的数据一次性地发送出去,再加上计算机对缓冲区的操作大大快于对外部设备的操作,故应用缓冲区可大大提高计算机的运行速度。
同时,设置缓冲区还可以避免一些意外情况的发生,例如缓冲区溢出、数据丢失等。在使用缓冲区时,我们需要注意缓冲区的状态以及缓冲区的大小,以便及时刷新缓冲区或者扩展缓冲区大小。
总之,缓冲区在C语言中起着至关重要的作用,它不仅能够提高程序的效率,还可以增加程序的稳定性和可靠性。
缓冲区的类型
缓冲区分为三种类型:全缓冲、行缓冲和不带缓冲。
1、全缓冲
在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。
2、行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。
3、不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。
getchar函数的正确使用
分析以下代码的输出结果:
#include<stdio.h>
int