关于C语言输入缓冲区的浅显理解

关于C语言输入缓冲区的浅显理解

缓冲区的存在使得很多标准输入输出函数不能正确地执行,导致很多刚入门的C语言新手苦恼不已,今天我们就来浅显地分析分析吧。

什么是缓冲区

缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

为什么要有缓冲区

假设CPU工作时直接和硬盘进行数据传输,那么会出现什么结果呢?CPU运行速度很快,而硬盘的读取速度相对CPU就显得很慢了,两者速度的不匹配,使得程序的运行效率很低,这显然不是C语言的特点所在。
所以缓冲区的存在就理所当然了,缓冲区在中间充当桥梁的作用,提高程序的运行效率。

缓冲区导致的问题

我们先来看看一个简单的小程序

#include <stdio.h>

int main()//从键盘上获取一个整型数据和一个字符
{
	//初始化	
	int num = 0;
	char ch = 'C';
	//获取数据
	printf("请输入一个数:");
	scanf("%d",&num);
	scanf("%c",&ch);
	//打印数据
	printf("%d\n",num);
	printf("%c\n",ch)

	return 0;
}

程序的结果和预想的并不同,在程序获取到一个int型数据就显示该int型的数据并换行回车了,程序就结束了。

尽管这个程序很简单,但这就可以说明缓冲区的问题了。

产生原因

这就和标准输入函数scanf有关了。
scanf以回车为结束标志时,会把字符’\n’也输入到输入缓冲区,所以下一条执行语句直接把’\n’当做字符读入ch中了。

解决办法

清空缓冲区

  1. getchar();会清空缓冲区中的一个字符
  2. scanf("%*[^\n]");
    scanf("%*c");
    //此种方法必须确保缓冲区中有垃圾数据
  3. stdin->_IO_read_ptr = stdin->_IO_read_end;
    //不同的平台使用方法不同,但不管有没有垃圾数据。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值