代码编织梦想

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字符,再按下回车,程序结束。

参考资料


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

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

  3. c语言scanf返回值 ↩︎

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/WANGSIRHHXI/article/details/111062456

双非渣硕,苦学71天,啃透5800多页架构师修炼手册,终于拿到美团35K的offer-爱代码爱编程

前言 长文干货提示,文章为大家完整记录了一位在北京做了3年的JAVA开发的朋友,如何通过美团的面试及拿到35K的offer。全篇内容由全程电话录音再手打腾稿,原创手打不易,请记得点赞收藏支持哦! 文章末尾有为大家准备好的JAVA面试资料。 面试总结 JAVA基础 1. JAVA中的几种基本数据类型是什么,各自占用多少字节,Integer占几个字节.

100+大厂应届offer,从7个维度全面分析-爱代码爱编程

对于大厂,很多人第一时间想到的就是BATJ。那其实被称之为大厂的互联网企业还有不少,那这些大厂的offer是给了什么样的人,我们如何增加自己能拿大厂的机会?特别是对于应届毕业生来说,刚毕业就能从一个大厂开始自己的职业生涯的话,对以后的道路来说,都是一种优势的加持。那我们今天就从100+大厂的应届生offer中来分析一下获得offer要怎么做!

python 线程(创建2种方式,锁,死锁,递归锁,GIL锁,守护进程)-爱代码爱编程

线程创建的2种方式(重点) 进程:资源分配单位线程:cpu执行单位(实体)线程的创建和销毁的开销特别小 线程之间资源共享,是同一个进程中的资源共享,会涉及到安全问题,所以需要加锁解决 锁:牺牲了效率,保证了数据安全(重点) 死锁现象:出现在嵌套的时候,双方互相抢对方已经拿到的锁,导致双方互相等待(重点) 递归锁: 解决了死锁现象(重点) rlo

方法的概述和定义-爱代码爱编程

方法概述: ​ java中一段具有特殊功能的代码段就是方法。 ​ 方法是一段具有固定格式的代码段,只表示一种功能,不同的功能使用固定格式书写。 ​ 所以可以使用方法提前写好一个又一个的功能,提供给你别人使用。 方法定义 语法格式: ​ 修饰符 返回值类型 方法名 (参数列表) { 方法体 } 格式解释: ​ 修饰符:限定所定义

Java IO 体系(三):Reader与Writer-爱代码爱编程

正文 本篇讲述的是Java IO中的Reader类和Writer类。跟之前讲述的InputStream和OutputStream一样为IO流中的抽象父类之一,不过Reader和Writer的操作对象不再是字节而是字符了。下面也不多说,贴上源码来加深我们的理解。 Reader.java package java.io; public abstrac

Python类的使用-爱代码爱编程

类和对象 类是抽象的概念,而对象是具体的东西。在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。 1、函数的写法 """ 标识 函数名字 (): 有冒号就要缩进

C语言实用算法系列之memcpy、memmove函数原理与实现-爱代码爱编程

直接看代码 #include<stdio.h> #include<string.h> /*返回指向pDest的指针*/ void* MemCopy(void* pDest, const void* pSrc, int nCount) { char* p = (char*)pDest; char* p1 = (char*)pSr

1380: 求奇数的乘积(多组测试)-爱代码爱编程

问题 题目描述 给你n个整数,求他们中所有奇数的乘积 输入 输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。 输出 输出每组数中的所有奇数的乘积,对于测试实例,输出一行。 样例输入 3 1 2 3 4 2 3 4 5 样例输出 3 15 提示 比如:

标准输入输出你真的吃透了吗?最详细的笔记来了-爱代码爱编程

标准输入输出你吃透了吗? 了解标准输入输出printf()scanf()第一个问题第二个问题第三个问题第四个问题深入scanf()清缓存便捷的标准输入输出函数scanf()运用一scanf()运用二scanf()运用三scanf()运用四scanf()为何要如此?非阻塞监听按键输入密码 了解标准输入输出 所谓标准输入输出,我们先理解为通过控制

《大学计算机基础实验教程(C语言版)》解析实训8-爱代码爱编程

《大学计算机基础实验教程(C语言版)》解析 《大学计算机基础实验教程(C语言版)》东北大学出版社 源代码解析 作者: 辽宁工业大学 电子202 宋家盛制作 如有错误,请告知:jff_16@163.com 注: 解析为增加代码的可读性均使用函数实现代码均可在Visual Studio 2019与Code::Blocks上运行通过,若在VC++6.0

C语言实用算法系列之strtok字符串分割、strcat字符串拼接、strcpy、strcmp-爱代码爱编程

代码 #define _CRT_SECURE_NO_WARNINGS #include <string.h> #include <stdio.h> char string[] = "A string\tof ,,tokens\nand some more tokens"; char seps[] = " ,\t\n"; ch

编写一个函数判定给定的一个数是否属于Fibonacci数列中的一项,函数的返回值为0(不属于)或者1(属于)-爱代码爱编程

编写一个函数判定给定的一个数是否属于Fibonacci数列中的一项,函数的返回值为0(不属于)或者1(属于) #include<stdio.h> int belong(int n){ int a=1,b=1,c=2; while(c<n){ c=a+b; a=b; b=c;