c语言——清空缓冲区代码

 

我们先看一组代码:

#include <stdio.h>
int main()
{
	char password[20];
	printf("请输入密码:>");
	scanf("%s", password);
	int ch = 0;
	printf("请确认(Y/N):");
	ch = getchar();
	if ('Y' == ch)
		printf("确认成功\n");
	else
		printf("确认失败\n");
	return 0;
}

 上述代码运行的结果为:

 还没输入Y/N,就输出确认失败,这是因为:

我们在使用scanf函数输入时,输入缓冲区的内容除了abcdef外,还有回车键的\n.

电脑将abcdef放到password里,缓冲区还留下了\n.

getchar()——每次只能读取一个字符.

getchar函数发现缓冲区里面有东西,就自动读取了一个字符\n,不用再从键盘输入.

所以,\n不等于Y,所以确认失败.

修改方案1:

#include <stdio.h>
int main()
{
	char password[20];
	printf("请输入密码:>");
	scanf("%s", password);
	int ch = 0;
	printf("请确认(Y/N):");
	getchar();//将\n从缓冲区取走,让缓冲区空出来
	ch = getchar();
	if ('Y' == ch)
		printf("确认成功\n");
	else
		printf("确认失败\n");
	return 0;
}

运行结果为: 

 

上述代码当我们输入这样的密码时: 

 scanf函数在读取字符串的时候,遇到空格就不再读取

所以在缓冲区留下了123456\n

当getchar()读取时取走了1,剩下23456\n

所以确认失败

 修改方案2:

#include <stdio.h>
int main()
{
	char password[20];
	printf("请输入密码:>");
	scanf("%s", password);
	int ch = 0;
	printf("请确认(Y/N):");
	while (getchar() != '\n')//循环读取,直到读到\n,使缓冲区为空
		;//空语句
	ch = getchar();
	if ('Y' == ch)
		printf("确认成功\n");
	else
		printf("确认失败\n");
	return 0;
}

代码运行结果为:

 

这次的分享就到这里,请大家多多点赞支持!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值