21-分支和循环语句_while语句(中)(初阶)

21-2 代码准备

getchar():获取字符

int ch = getchar();  //把获取的字符的ASCII码值放在ch中
int main()
{int ch = getchar();printf("%c\n", ch);  //ch存的是该字符的ASCII码值,此处以字符形式打印ASCII码值对应的字符putchar(ch);
}

运行结果:

第一行是输入的,二三行是输出的 

注:EOF(end of file),读取错误或文件结束时,返回EOF

int main()
{int ch = 0;while ((ch = getchar()) != EOF){putchar(ch);}return;
}

运行结果: 

 输入一个字符,按回车即可输出该字符;如果想要结束(即EOF),就按Ctrl+z

21-2 代码示例

写这样的代码有什么用呢?下面用一组例子向你展示

代码目的:输入密码->确认密码

//假如密码是字符串
int main()
{char password[20] = { 0 };printf("请输入密码:");scanf("%s", password);  //数组名本身就是地址printf("请确认密码:");int ret = getchar();  //键盘输入Y或Nif ('Y' == ret)printf("Yes\n");elseprintf("No\n");return 0;
}

假如我的密码是:abcdef,那么输入密码,敲一个回车:

 奇怪!为什么我还没有输入Y/N,就显示No呢?

原因是:

scanf和getchar是同一类型的函数,它们不是直接从键盘上拿数据,而是从输入缓冲区里拿

输入密码:abcedf,按下回车(\n)scanf才能读到

scanf只拿按下回车前输入的密码,即abcdef

接下来getchar登场,它看到缓冲区里面还有个\n,就没等你输入Y/N就直接拿走了\n

此时,ret存的就是\n,自然不是'Y',所以进入else输出No

修改一下代码

思路:加一个getchar先把剩下的\n读取了

int main()
{char password[20] = { 0 };printf("请输入密码:");scanf("%s", password);  //数组名本身就是地址getchar();  //读取'\n'printf("请确认密码:");int ret = getchar();  //键盘输入Y或Nif ('Y' == ret)printf("Yes\n");elseprintf("No\n");return 0;
}

依旧假如我的密码是:abcdef,那么输入密码,敲一个回车:

输入‘Y’确认密码,回车:

顺利执行了!但是这样就能解决所有情况吗?

假如我的密码是:abc def呢?

再次错误:

为什么呢?

原因:

输入密码:abc def,按下回车(\n)scanf才能读到

scanf读到空格前,即只读了abc

所以密码只读了abc

第一个getchar登场,此时还剩下 def\n,getchar只拿走' '(空格)

第二个getchar登场,此时还有def\n,直接读走一个字符,自然不是'Y',所以进入else输出No

综上,清除缓冲区的时候可能要清除的不是一个字符,而是一堆字符。所以我们直接搞一个循环,把所有的干扰字符都清除掉(清理缓存区)

int main()
{char password[20] = { 0 };printf("请输入密码:");scanf("%s", password);  //数组名本身就是地址int ch = 0;while ((ch = getchar())!= '\n'){;}printf("请确认密码:");int ret = getchar();  //键盘输入Y或Nif ('Y' == ret)printf("Yes\n");elseprintf("No\n");return 0;
}

成功运行!

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

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

相关文章

【2024第一期CANN训练营】3、AscendCL运行时管理

文章目录 【2024第一期CANN训练营】3、AscendCL运行时管理1. 初始化与去初始化2. 资源申请与释放2.1 申请流程2.2 释放流程2.3 运行模式(可选) 3. 数据传输3.1 接口调用流程3.2 主要数据传输场景1. Host内的数据传输2. 从Host到Device的数据传输3. 从Dev…

排序算法:快速排序(递归)

文章目录 一、创始人托尼霍尔的快速排序二、挖坑法三、前后指针法 所属专栏:C初阶 引言:这里所说的快速排序有三种,第一种是霍尔大佬自创的,还有一种叫做挖坑法,另外一种叫前后指针法 一、创始人托尼霍尔的快速排序 1.这里我们先…

拆解Spring boot:Springboot为什么如此丝滑而简单?源码剖析解读自动装配

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

MySQL 篇- Java 连接 MySQL 数据库并实现数据交互

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 JDBC 概述 2.0 实现 Java 连接 MySQL 数据库并实现数据交互的完整过程 2.1 安装数据库驱动包 2.2 创建数据源对象 2.3 获取数据库连接对象 2.4 创建 SQL 语句 2.…

8.Python从入门到精通—Python 字符串,转义字符,字符串运算符

8.Python从入门到精通—Python 字符串,转义字符,字符串运算符 Python 字符串创建字符串访问字符串中的字符字符串切片字符串操作符字符串方法 Python 转义字符Python字符串运算符 Python 字符串 在 Python 中,字符串是一种基本数据类型,用于表示文本数据…

构建部署_Docker常用命令

构建部署_Docker常见命令 启动命令镜像命令容器命令 启动命令 启动docker:systemctl start docker 停止docker:systemctl stop docker 重启docker:systemctl restart docker 查看docker状态:systemctl status docker 开机启动&…

Java微服务分布式事务框架seata

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

SSH远程连接断开后,程序继续运行

1、问题 我们在使用SSH连接远程服务器跑代码的时候,可能会遇到 代码需要跑很久 的情况,你可能会想 断开远程连接,但是,代码仍然要继续跑。 (eg: 晚上关电脑,但是想让代码继续跑着,第二天想看结果) 2、scre…

哪里有视频素材网站免费下载?高清烟花视频素材哪里有?

如果你在寻找那些能点亮夜空的绚丽烟花视频素材,或者无水印的高清视频素材,那下面这些资源网站将会是你的宝库。今天,我要分享给你一些最佳的无水印视频素材下载网站,让你的视频制作闪耀起来。 1.蛙学府 这个网站是视频创作者的天…

Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷,分布式卷,分布式复制卷,纠删卷 操作系统 内核 角色 Ip地址 说明 CentOS Stream 9 x86_64 5.14.0-427.el9.x86_64 客户端 client 192.168.80.119 挂载存储业务机器 CentOS Stream 9 x86_64 5.14.0-427.el9.x8…

开展“人工智能+”行动,Gooxi与你一起奔赴新质未来

在今年两会上,“新质生产力”成为了反复被提及的热词。在政府发布的工作报告中“大力推进现代化产业体系建设,加快发展新质生产力”更是被置于政府工作任务的首位。具体说来,发展新质生产力包括产业链升级、培育新产业、推进数字经济建设三方…

linux安装anconda

第一步: 下载anaconda 下载地址:(选择Linux版本的) https://repo.anaconda.com/archive/第二步: 把下载好的anaconda放到指定的路径 然后在该路径下(我是直接放属于我的根目录下) 输入以下命令…

国创证券|资源再生概念持续活跃,超越科技两连板,大地海洋等走高

资源再生概念15日盘中再度走强,截至发稿,超越科技涨停斩获两连板,深水海纳涨超14%,大地海洋涨超12%,华新环保涨近9%,天奇股份、格林美、怡球资源等涨超5%。 消息面上,3月13日,国务院…

ElasticSearch架构设计

一、基础概念 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作: 一个分布式的实时文档…

【2024第一期CANN训练营】2、AscendCL概述

文章目录 【2024第一期CANN训练营】2、AscendCL概述1. AscendCL架构及基本概念1.1 什么是AscendCL?1.2 AscendCL的优势1.3 AscendCL应用场景1.4 基本概念 2. AscendCL接口调用流程2.1 流程概述2.2 详细步骤2.3 头文件和库文件 3. 准备开发和运行环境3.1 部署环境3.2…

便携式气象站的工作原理

TH-BQX9便携式自动气象观测仪器是一种集成了多种传感器和自动化技术的气象监测设备,以其便携性、自动化和高精度等特点,广泛应用于气象、环保、农业、科研等领域。 首先,它的便携性是其最大的优势之一。设计紧凑、轻便易携,使得用…

【送书福利!第一期】《ARM汇编与逆向工程》

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈 😎《大数据专栏》大数据从0到秃头👽&…

202212 CSP认证 | JPEG 解码

JPEG 解码 一道特别幸福简单的第三题…都不敢想象在考场上碰见这种题目会有多幸福。直接按照题目意思做就好了,感觉比第二题还简单…而且数组特别小完全没有超时压力 补充一个对小数处理的部分,包括本题涉及的四舍五入取整以及输出取整:C 实…

小迪安全42WEB攻防-通用漏洞文件包含LFIRFI伪协议

#知识点: 1、解释什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识: 1、本地包含LFI&远程包含RF1-区别 一个只能包含本地,一个可以远程加载 具体形成原因由代码和环境配置文件决定…

2024智慧农场系统微信小程序前端如何上传以及配置

2024智慧农场系统微信小程序前端如何上传以及配置 首先下载微信开发者工具 下载好以后打开,然后导入项目 前端修改:siteinfo.js 里面的域名信息 改完之后开始在微信开发者工具中开发工具中编译、上传、发布即可