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

 
  

我们先看一组代码:

#include 
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;
}

 上述代码运行的结果为:

c语言——清空缓冲区代码_第1张图片

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

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

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

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

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

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

修改方案1:

#include 
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;
}

运行结果为: 

c语言——清空缓冲区代码_第2张图片 

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

c语言——清空缓冲区代码_第3张图片

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

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

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

所以确认失败

 修改方案2:

#include 
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;
}

代码运行结果为:

c语言——清空缓冲区代码_第4张图片

 

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

你可能感兴趣的:(c语言,开发语言)