【C语言】getchar()和scanf()的使用

本文介绍了C语言中getchar()和scanf()的使用方法。getchar()函数从缓冲区中读取一个字符,而scanf()则按照指定格式读取数据。文章详细解释了缓冲区的概念、类型及其在提高程序效率中的作用,并提供了使用这两个函数时的注意事项。
摘要由CSDN通过智能技术生成

getchar()

image.png

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 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值