C语言实现字母的大写转换成小写

C语言实现字母的大写转换成小写

  • 1 问题描述:
  • 2 程序代码:
    • 2.1 代码分析:
  • 3 改进
    • 3.1 程序测试结果
  • 参考资料

1 问题描述:

程序功能:实现字母的大小写转换。输入一个大写字母,接着按下回车,第二行就输出小写字母。注意:每次只能输入一个字母,否则出错。
编程软件:visual studio 2019


2 程序代码:

代码来源见链接:1


#define  _CRT_SECURE_NO_WARNINGS 1
#include 
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,并按下回车,格式如下图所示
C语言实现字母的大写转换成小写_第1张图片
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 

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 

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 程序测试结果

C语言实现字母的大写转换成小写_第2张图片
运行以上程序,可以发现,即使连续输入换行符,也不会输出错误的结果。如果想要程序结束,则输入Ctrl+Z3,可以看到一个^Z字符,再按下回车,程序结束。

参考资料


  1. 大小写转换_牛客网 ↩︎ ↩︎

  2. C语言中EOF到底是什么? ↩︎

  3. c语言scanf返回值 ↩︎

你可能感兴趣的:(C语言学习,c语言,编程语言)