C语言--输入缓存区残留相关bug

时间地点:

2023.8.6

自己刷C语言基础源码题出现的

发现bug:

简单的英文字母大小写转换问题

#include <stdio.h>
int main()
{
char character;
printf("输入一个大写字母转成小写:");
scanf("%c", &character);
character += 32;
printf("小写为:%c\n", character);
    
printf("输入一个小写字母转成大写:");
scanf("%c", &character);
character -= 32;
printf("小写为:%c", character);
return 0;
}

我代码有问题,没让我使用第二个scanf函数输入第二个字母

分析原因:

在第二次调用 scanf 时,输入缓存中可能还有残留的换行符

解决方案:

在每次使用 scanf 函数之前调用 getchar 函数,用于清空输入缓存中的残留字符

修改后代码:

#include <stdio.h>
int main()
{
	char character;
	printf("输入一个大写字母转成小写:");
	scanf("%c", &character);
	character += 32;
	printf("小写为:%c\n", character);

	getchar(); // 清空换行符

	printf("输入一个小写字母转成大写:");
	scanf("%c", &character);
	character -= 32;
	printf("小写为:%c", character);
	return 0;
}

如何避免:

在每次调用 scanf 之前,我们使用 getchar 函数来清空输入缓冲中的换行符

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨空集

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值