清除scanf()函数的缓冲区

scanf()是C语言中一个重要的输入函数。但是在使用不当时会给程序带来很大的漏洞。在这里,我想就scanf()的缓冲区问题做一简单的论述。

首先,先看以下代码:

#include <stdio.h>

int main()
{
	int count = 0 ;
	char ch = 0 ;
	while(count < 3)
	{
		printf("请输入:") ;
		scanf("%c", &ch) ;
		count++ ;
	}
	return 0 ;
}

运行结果:
在这里插入图片描述

这个运行结果与我的初衷不同。本想通过这个while循环来控制输入三次后结束。可是第二次光标并没有停留,直接跳到了第“三”次输入,这是因为scanf()函数有个缓冲区。在第一次输入A后,还有个回车符 在scanf()函数的缓冲区里,循环到第二次时,直接把这个“回车符”送给了scanf(),所以用户并的输入直接跳到了第三步。或者是一次性输入3个字符甚至更多,程序就会直接执行完毕。道理同上。请看以下运行结果:
在这里插入图片描述
解决这个问题的方法就是要在每次输入后清除掉缓冲区里的剩余内容。请看以下代码:

#include <stdio.h>

int main()
{
	int count = 0 ;
	char ch = 0 ;
	while(count < 3)
	{
		printf("请输入:") ;
		scanf("%c", &ch) ;
		while ((ch = getchar()) != EOF && ch != '\n') ; //清除缓冲区的内容
		count++ ;
	}
	return 0 ;
}

运行结果:
在这里插入图片描述

这样就可以正常地进行输入了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值