目录
前言
在五一期间,我又又又被百度给坑了,这是一道关于字母大小写转换的题,总体没什么难点,但还是缺少经验啊,卡在了多组输入这一关,随后又被劣质回答踹坑里了,调试了好久才发现问题所在,接下来分享一下我的惨痛经验,希望能把大伙从坑里挖出来.
题目描述
完成字母大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母。
输入描述:
多组输入,每一行输入一个字母。
输出描述:
针对每组输入,输出单独占一行,输出字母的对应形式。
第一版
百度出来的内容如下,什么都没说,就一行代码,你气不气。
接下来是我查询了百度之后写出的第一版内容:
#include<stdio.h>
int main()
{
char ch = ' ';
while (scanf("%c",&ch) != EOF)
{
if (islower(ch))//判断是否为小写字母
{
printf("%c\n", toupper(ch));//转换为大写
}
else
{
printf("%c\n", tolower(ch));//转换为小写
}
}
return 0;
}
功能大体可以实现,但是中间空出来一大段,这就不正常了,应该是接下去的呀!
开始调试和小bug
调试之后发现,原来scanf在接收字符时,是会接收回车的,所以我们要在后面加入一个scanf或者getchar吸收回车。完善后的代码如下:
#include<stdio.h>
int main()
{
char ch = ' ';
int supervision = 0;
while ((supervision = scanf("%c", &ch))!=EOF)
{
if (islower(ch))//判断是否为小写字母
{
printf("%c\n", toupper(ch));//转换为大写
}
else
{
printf("%c\n", tolower(ch));//转换为小写
}
getchar();
}
return 0;
}
并且VS编译器还有一个bug,结束程序时要输入^Z结束程序,也算是一个小坑了。