C语言 getchar 清理缓冲区

getchar介绍

getchar获取一个字符,读取成功返回字符的ASCLL码值,失败返回EOF。

清理缓冲区

我们看一道字母大小写转换的牛客题:BC48-字母大小写转换

#include<stdio.h>

int main()
{
	char i;
	
	while (scanf("%c",&i)!=EOF)
	{
		getchar();
		if (i>= 'a' && i<= 'z')
		{
			i = i - 32;
			printf("%c\n", i);
		}
		else if (i>= 'A'&&i<= 'Z')
		{
			i = i + 32;
			printf("%c\n", i);
		}
		
	}
	
	return 0;
}

这里的getchar就是清理缓冲区的作用,它是怎么做到的

其实scanf我们从键盘输入字符的时候,不是直接从键盘输入道scanf中,中间有一个缓冲区

scanf其实是从缓冲区中拿字符:

就像图片一样,如果我们输入 abcd 然后敲下回车,缓存区中就会有 abcd 回车键就会产生 '\n',scanf就拿走了abcd,留下了'\n'。

getchar就会把缓冲区剩下的 '\n' 拿走,这样缓冲区就被清零了,就可以进行下次输入了,如果我们没有清理缓冲区,下次 scanf 就会把上次剩下的'\n'先拿走,就不会是我们输入的字符了。

我们来看一个例子:输入一个密码,然后询问是否确认

#include<stdio.h>

int main()
{
	char arr[10];
	char a = 0;
	printf("请输入密码:");
	scanf("%s", arr);
	//getchar();
	printf("是否确认 y / n:");
	scanf("%c", &a);
	if (a == 'y')
	{
		printf("\n确认");
	}
	else
	{
		printf("\n不确认");
	}
	return 0;
}

如果我们没有getchar 结果:

我们都没有输入下一个字符就输出不确认了,说明缓冲区没被清理。只要加上就行了。

其实还有一个写法,scanf读取字符串的时候遇到空格就不再读取了:

像这样我们有getchar还是会直接输出不确认,为什么呢?因为scanf只拿走了abcd,空格之后还留下好多字符在缓冲区,一个getchar不够,所以我们需要这样写:

while (getchar() != '\n')
	{
		;
	}

看结果:这样就成功了,我们用一个循环,getchar读取不到'\n'就一直读取直到读取到'\n'为止。

所以需要清空缓冲区的时候是要进行不止一次输入的时候,在一次scanf后面加上getchar清空缓冲区比较好。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值