时间地点:
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 函数来清空输入缓冲中的换行符