C语言实现字母的大写转换成小写-爱代码爱编程
1 问题描述:
程序功能:实现字母的大小写转换。输入一个大写字母,接着按下回车,第二行就输出小写字母。注意:每次只能输入一个字母,否则出错。
编程软件:visual studio 2019
2 程序代码:
代码来源见链接:1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
char ch = 0;
//循环多次读入,利用gethar消去读入的换行符
while(scanf("%c", &ch) != EOF) {
getchar();
//ch+32即为小写字母
printf("%c\n", ch+32);
}
}
2.1 代码分析:
scanf首先接收一个字符,赋值给ch,当scanf函数的返回值为EOF时,循环终止,否则程序会一直循环输入输出。那么,如果我们想终止程序,有什么办法可以让scanf的返回值为EOF呢?下面举例分析。
假设输入一个字符A,并按下回车,格式如下图所示
A被scanf接收,并赋值给ch,回车被getchar()接收,其中回车是换行符,也属于字符,所以,如果不用getchar处理换行符,在下一次循环时,回车被当做字符赋值给ch,进而导致输出错误的结果。你可以试着把 getchar() 去掉,运行一下,看看会出现什么结果。程序中的EOF 是end of file的缩写,是定义在头文件stdio.h的一个宏,它的值为-1,定义格式为:#define EOF (-1))2
对于printf("%c\n", ch+32);
因为大写和小写字母的ASCII码值相差32,例如A的ASCII码值为65,a的ASCII码值为97。所以在ch上加上32,就会输出其小写格式。
当然也可以使用tolower等库函数转换大小写1,程序如下。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
char ch = 0;
//该部分如上述所示
while (scanf("%c", &ch) != EOF) {
getchar();
//调用内置的tolower函数进行转换
printf("%c\n", tolower(ch));
}
}
3 改进
对于以上程序,如果不小心连续输入回车,程序会出错,针对这个问题进行改进,并增加了程序终止功能,当按下Ctrl+Z时,程序终止。上面两个程序连续输入两次Ctrl+Z时,也会退出循环。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char a;
while ((a= getchar()) != EOF)//getchar()在键盘输入ctrl+z 时,能获得EOF
{
getchar(); //循环多次读入,利用gethar消去读入的换行符
if (a == '\n')
printf("\n");
else
printf("%c\n", a + 32);
}
return 0;
}
3.1 程序测试结果
运行以上程序,可以发现,即使连续输入换行符,也不会输出错误的结果。如果想要程序结束,则输入Ctrl+Z3,可以看到一个^Z字符,再按下回车,程序结束。
参考资料
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/WANGSIRHHXI/article/details/111062456