C语言键盘输入字符串小写转大写输出及scanf的小问题解决

1.博主在学习C语言时,也没太关注C语言的一些细节问题,导致后面有人问问题的时候一时没回答出来,也就是所谓的基础不牢地动山摇,比如这一次有同学问的scanf键盘输入的小问题,折腾了一阵子还是想出来问题所在。

2.废话不多说,要实现的是键盘输入小写字母字符串,然后转换成大写输出,代码如下:

#include <stdio.h>int main()
{char str[10];int i,n;printf("输入长度n:");scanf("%d",&n);printf("输入字符串长度%d:",n);for ( i = 0; i < n; i++){scanf("%c",&str[i]);if (str[i]>='a' && str[i]<='z'){str[i] = str[i]-32;}}for ( i = 0; i < n; i++){printf("%c",str[i]);}return 0;}

然后我输入和输出的结果如下:

问题来了,为什么只输出AS?很多小朋友可能就一脸懵了

但是聪明的朋友也很容易发现到,唉?这个AS和输入字符串的中间输出一个空白行,也就是如下图红色框起来的是空白行,这是为什么呢?

这个玄幻的东西我们就得从代码内容讲起

在代码中,我们首先输入长度n,然后到输入字符串是不是?对,问题就出现在这里。

当我们在输入长度n时然后回车是不是?也就是说我们键盘输入两次(n输入一次,回车键算一次),当然我们都知道scanf是以空格为结束一次输入(回车也是空格),但是可能大家忽略了回车(\n)属于字符,后面的scanf以%c接收,因此我们在上一个scanf输入n然后回车时,回车被后面的第一次for循环的str[0]接收,所以str[0]值是'\n',str[1]值是'a',str[2]值是's',因此在输出的时候就出现了上面的结果,输出空白的一行(实际上是输出回车),然后输出AS,怎么解决呢?

3.两种解决办法

(1)加一个scanf接收回车,代码如下,我加了一行 scanf("%c",&m);,用于接收输入n后的回车

#include <stdio.h>int main()
{char str[10],m;int i,n;printf("输入长度n:");scanf("%d",&n);printf("输入字符串长度%d:",n);scanf("%c",&m);for ( i = 0; i < n; i++){scanf("%c",&str[i]);if (str[i]>='a' && str[i]<='z'){str[i] = str[i]-32;}}for ( i = 0; i < n; i++){printf("%c",str[i]);}return 0;}

(2)%c前加空格,代码如下:

#include <stdio.h>int main()
{char str[10];int i,n;printf("输入长度n:");scanf("%d",&n);printf("输入字符串长度%d:",n);for ( i = 0; i < n; i++){scanf(" %c",&str[i]);if (str[i]>='a' && str[i]<='z'){str[i] = str[i]-32;}}for ( i = 0; i < n; i++){printf("%c",str[i]);}return 0;}

为什么scanf(" %c",&str[i]);的%c前面加空格,因为在scanf中比如scanf("%c  %c  %c",&n),这样的话就不会以空格结束输入,而是以空格作为这三个的输入分隔符。

因此,在%c前面加空格也就是从输入n到输入n个字符是以空格(回车也属于空格)隔开输入,因此%c不会读取回车,那么str[0]就不会是'\n',这个时候结果正确,如下:

输出也不再留有空白一行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker | Docker部署MySQL

Docker | Docker部署MySQL ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Docker系列…

软件工程--面向对象分析用通俗语言20小时爆肝总结!(包含用例图、活动图、类图、时序图......)

面向对象方法分为面向对象分析&#xff08;OOA&#xff09;、面向对象设计&#xff08;OOD&#xff09;、面向对象编程&#xff08;OOP&#xff09;&#xff0c;本文详细介绍面向对象分析 本文参考教材&#xff1a;沈备军老师的《软件工程原理》大多图片来源其中 目录 面向对…

JMeter多脚本间的启动延时

JMeter做压测时&#xff0c;当需要多个jmx脚本依次执行时&#xff0c;需要用到“启动延时”&#xff0c;即间隔可设置的时间后启动运行下一个jmx脚本。 实现“启动延时”的方法有2个。 方法一、利用JMeter线程组中的"Startup delay"参数 如上图&#xff0c;调度器&…

解决git与huggingface项目下载速度慢或者失败的问题

git clone 项目报错 比如使用git clone 下载项目&#xff1a; git clone https://github.com/ChuRuaNh0/FastSam_Awsome_TensorRT.git有时候会报以下错误&#xff1a; fatal: unable to access ‘https://github.com/xxx.git/’: Failed to connect to github.com port 443 …

P15 C++ 枚举

The ChenPi 前言 今天我们要讲的是 C 中的枚举。 enum 是 enumeration 的缩写&#xff0c;基本上可以说&#xff0c;它就是一个数值集合。如果你想要给枚举一个更实际的定义&#xff0c;它们是给一个值命名的一种方法。 所以我们不用一堆叫做 A、B、C 的整数。我们可以有一个…

c语言:模拟实现各种字符串函数(2)

strncpy函数&#xff1a; 功能&#xff1a;拷贝指定长度的字符串a到字符串b中 代码模拟实现&#xff1a; //strncpy char* my_strncpy(char* dest, char* str,size_t num) {char* ret dest;assert(dest && str);//断言&#xff0c;如果其中有一个为空指针&#xff…

vue3+ts 依赖注入 provide inject

父级&#xff1a; <template><div><h1>App.vue (爷爷级别)</h1><label><input type"radio" v-model"colorVal" value"red" name"color" />红色</label><label><input type"r…

C++标准模板库 STL 简介(standard template library)

在 C 语言中&#xff0c;很多东西都是由我们自己去实现的&#xff0c;例如自定义数组&#xff0c;线程文件操作&#xff0c;排序算法等等&#xff0c;有些复杂的东西实现不好很容易留下不易发现的 bug。而 C为使用者提供了一套标准模板库 STL,其中封装了很多实用的容器&#xf…

山西电力市场日前价格预测【2023-11-27】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-27&#xff09;山西电力市场全天平均日前电价为40.02元/MWh。其中&#xff0c;最高日前电价为293.07元/MWh&#xff0c;预计出现在17:45。最低日前电价为0.00元/MWh&#xff0c;预计出现…

1998-2021年全国各地级市PM2.5平均浓度数据

1998-2021年全国各地级市PM2.5平均浓度数据 1、时间&#xff1a;1998-2021年 2、指标&#xff1a;省、省代码、市、市代码、年份、均值、总和、最小值、最大值、标准差 3、来源&#xff1a;Washington university Atmospheric Composition Analysis Group 4、范围&#xff…

操作系统——解决了我的一些困惑

目录 1、电脑开机做了什么事情 2、真正实现并行的计算机 3、计算机中的淘汰算法 & 分配算法 & 调度算法 & 空间管理 4、什么是虚拟内存&#xff1f;为什么需要虚拟内存&#xff1f;最多可分配多少&#xff1f; 5、TLB&#xff08;快表&#xff09;、分页存储&…

微服务--01--简介、服务拆分原则

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 微服务微服务架构&#xff0c;是服务化思想指导下的一套最佳实践架构方案。服务化&#xff0c;就是把单体架构中的功能模块拆分为多个独立项目。 单体架构微服务架构…

Spine深入学习———— 渲染

数据有了之后&#xff0c;就开始渲染 渲染相关 绘制顺序 骨架的绘制顺序就是一个插槽列表&#xff0c;在插槽列表中上方的附件在下方之上绘制&#xff0c;绘制顺序可以在层级树中的骨架下查看。 基础流程 渲染实现 以下按照cocos2dx的实现来 &#xff08;cocos2dx 3.7 spin…

【云平台】STM32微信小程序阿里云平台汇总——持续更新

【云平台】STM32微信小程序阿里云平台汇总——持续更新 文章目录 前言总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 【云平台】STM32微信小程序阿里云平台学习板 【云平台】小白从零开始&#xff1a;小程序阿里云平台控制STM32&#xff08…

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据 1、时间&#xff1a;1980-2022年 2、来源&#xff1a;WIPO数据库 3、范围&#xff1a;世界各国&#xff08;180多个国家&#xff09; 4、指标&#xff1a;国家名称、年份、代码、类型、专利申请总量、…

GPU中的半格效应(half-pixel)

最近在阅读《GPGPU编程技术从GLSL、CUDA到OpenCL》时&#xff0c;章节3.4.3 卷积核中讲到了半格效应&#xff0c;该书中的英文标注为&#xff1a;0.5 effect&#xff0c;也有被称为&#xff1a;half pixel offset等。 联想到我之前的GPU计算、渲染时的代码&#xff0c;在做画质…

TUP通信

一&#xff0c;概括 二&#xff0c;常用方法 三&#xff0c; 实现步骤&#xff08;一发一收&#xff09; 四&#xff0c;案例&#xff08;一接一收&#xff09; &#xff08;1&#xff09;&#xff0c;客户端 &#xff08;2&#xff09;&#xff0c;服务端 &#xff08;3&…

歌手荆涛作品《父与子》:一首深情演绎父子情感的歌曲

在华语乐坛中&#xff0c;有很多歌曲以亲情为主题&#xff0c;其中歌手荆涛演唱的《父与子》就是其中的代表作之一。这首歌以朴实的歌词和深情的演唱&#xff0c;打动了无数听众的心灵&#xff0c;让人感受到了亲情之间的温暖和牵绊。 《父与子》这首歌以父子为主题&#xff0c…

【C++】类型转换 ④ ( 子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast )

文章目录 一、子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast1、构造父类和子类2、子类 和 父类 之间的类型转换 - 隐式类型转换3、子类 和 父类 之间的类型转换 - 静态类型转换 static_cast4、子类 和 父类 之间的类型转换 - 重新解释类型转换 reinterpret_cast5、…

【Java Spring】SpringBoot Bean详解

文章目录 1、Bean方法注解简介2、Bean注解重命名3、对象装配&#xff08;获取Bean对象&#xff09;3.1 对象装配之属性注入3.2 对象装配之Set 注入3.3 对象装配之构造方法注入 4、Resource VS Autowired5、Bean对象的作用域5.1 验证Bean对象的默认作用域5.2 Bean对象的六大作用…