更深度了解getchar和putchar现象

news2024/12/24 10:14:02

目录

前言:

1.getchar和putchar

1.1基本使用 

1.2一些特殊打印

1.3putchar打印空格

2.深度了解现象


前言:

  经过学习,总结getchar()函数和putchar()函数在搭配使用while循环的时候,控制台窗口光标位置的出现位置的由来

1.getchar和putchar

  大家也都清楚getchar和putchar的作用了,我通过一些简单的代码来解释,以及通过一些特殊例子来说明一些情况。

1.1基本使用 

  这是使用的基本情况,我们知道getchar返回的是字符的ASCII,看下面的代码:

   这里我们想探讨的是什么呢?可能身为读者的不知道博主想表达什么,这里想说的是,首先,getchar读取失败的时候,会返回一个EOF这个知识点,ctrl+z就是让getchar读取失败第二就是使用int来创建变量ch来接收字符,为什么?我们知道用ASCII码表来表示字符的时候,只有0-127有表示字符,ASCII码值-1对应的字符未定义,这样的时候,当我们getchar读取失败,又用char类型创建变量,打印的时候我们格式会用%c来打印字符,此时就会像上面代码一样,输出一个正方形的错误,而我们用int类型创建变量,我们肯定是下意识用%d来打印的,那-1就原封不动打印出来,而且getchar返回值是int。这里就是想告诉读者,在%c打印字符的时候,出现了奇怪的现象,会不会是超出范围了。

1.2一些特殊打印

  看完特殊打印后,最后一部分就可以更深了解getchar的等的效果啦。空杯心态哦~

  我们看到这里,scanf函数遗留下来的空字符,直接被getchar读取放到ch变量里,ch变量不等于字符'Y',所以在确认Y/否认N后面直接跟着放弃确认

  最后我们还使用putchar打印了ch,ch是空字符,打印出来和换行效果一致

函数功能
getchar()putchar()
读取输入缓冲区的一个字符显示要打印的一个字符

1.3putchar打印空格

  因为我们鼠标可以在控制台上任意滑动,就会有这个白白的选中区,putchar打印的空格选中也一样,所以基本一样

2.深度了解现象

  希望读者可以自己再编译器上敲上这么一些代码自己感受一下,虽然我截图的时候,有吧光标的位置给截着出来,但还是需要去体会一番

  为什么在我们输入一个字符a后会,打印出来会跳到第三行!

  有没有想过这个问题,我们知道,在输入的时候,我们输入a回车,就会来到第二行,然后就是打印a,循环结束,回到判断部分,继续读取,大家可以抢答了,读取到了什么?

  对的,恭喜你答对了,读取到了'\n'放到了ch里,'\0'等于EOF吗?显然不等,'\0'的ASCII码值是0,EOF是-1好的,putchar(ch),ch是空字符,大声告诉我,光标调到第三行是不是因为再一次putchar了!是的,由于计算机太快了,我们看不到这细微的变化。那有人说了,博主你怎么知道的,嘿嘿,请看下面的内容。

  这里怎么理解while里的if条件呢?判断式表达的意思是,如果你输入的字符ASCII码值小于'0'(48)或者大于'9'(57),那么你就执行continue,重新回到判断,没有打印也就是说,只有输入字符0-9之间的数字,才能有putchar

  这里光标不在第三行,而在紧贴在打印的内容后面。因为你看,当我们输入1回车,右边的窗口来到第二行,ch接收到了1,不等于EOF,进到循环里面,不符合if条件,没有执行continue,putchar打印出1,好的,一个循环结束重新来到判断,getchar没有停留,因为读取到了上次留下的'\n',不等于EOF,也进入到循环,但符合条件,continue执行,ch里是空字符,但没法putchar重新回到判断,这次有停留了,因为输入缓冲区里啥也没有,不像上面那段代码,这里的条件,使得ch为空字符的时候putchar不了,所以就在第二行的后面显示光标要我们输入

  读到这里,希望你有所收获,大家也可以去看看《令博主奔溃的scanf函数-C》,也挺有意思的内容。如果文章有内容上,排版上有问题,可以评论区下方说哦~

  求点赞,求点赞,求点赞!你的点赞是我更新的动力!

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

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

相关文章

JavaSE学习进阶day04_03 包装类

第五章 包装类(重点) 5.1 概述 Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型…

蓝桥杯15单片机--超声波模块

目录 一、超声波工作原理 二、超声波电路图 三、程序设计 1-设计思路 2-具体实现 四、程序源码 一、超声波工作原理 超声波时间差测距原理超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍…

计算属性,watch和watchEffect

计算属性-computed 什么是计算属性: computed函数,是用来定义计算属性的,计算属性不能修改。 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。 计算属性还可以依…

【目标检测论文阅读笔记】Extended Feature Pyramid Network for Small Object Detection

(未找到代码,只有yaml文件) Abstract. 小目标检测仍然是一个未解决的挑战,因为很难提取只有几个像素的小物体的信息。虽然特征金字塔网络中的尺度级对应检测缓解了这个问题,但我们发现各种尺度的特征耦合仍然会损害小…

百度飞桨paddlespeech实现小程序实时语音流识别

前言: 哈哈,这是我2023年4月份的公司作业。如果仅仅是简单的语音识别倒也没什么难度,wav文件直接走模型输出结果的事。可是注意标题,流式识别、实时! 那么不得不说一下流式的优点了。 1、解决内存溢出的烦恼。 2、…

《论文阅读》Unified Named Entity Recognition as Word-Word Relation Classification

总结 将NER视作是word-word间的 Relation Classification。 这个word-word 间的工作就很像是TPlinker那个工作,那篇工作是使用token间的 link。推荐指数:★★★☆☆值得学习的点: (1)用关系抽取的方法做NER抽取 &…

佳明手表APP开发系列01——简单汉化英文版

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、佳明手表APP开发过程简介二、做个简单的个性化——在英文版写几个汉字1.MonkeyC 图形处理2.获得汉字点阵字模数据3.MonkeyC 汉字输出函数总结前言 佳明手表…

蓝海创意云应邀参与苏州市元宇宙生态大会

4月14日,苏州市软件行业协会元宇宙专委会成立大会暨元宇宙生态大会在苏成功举办。此次大会由苏州市工业和信息化局指导,苏州高新区(虎丘区)经济发展委员会、苏州市软件行业协会主办,蓝海彤翔集团作为协办单位参与此次大…

IDEA集成Git、GitHub、Gitee

一、IDEA 集成 Git 1.1、配置 Git 忽略文件 为什么要忽略他们? 与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。 怎么忽略? 创建忽略规则文件 xxxx.ignore(前缀名随便起&#xff0c…

创建Google play开发者账号,并验证身份通过

一、注册前准备 最好准备一台没有怎么用过Google的电脑和🪜准备一个没有注册过Google的手机号准备一张信用卡或者借记卡(需要支付$25),支持的类型如下图 这里还需注意:最后账号注册成功还需要验证身份也就是实名认证&…

关于Python爬虫的一些总结

作为一名资深的爬虫工程师来说,把别人公开的一些合法数据通过爬虫手段实现汇总收集是一件很有成就的事情,其实这只是一种技术。 初始爬虫 问题: 什么是爬虫? 网络爬虫是一种按照一定的规则,自动地抓取网络信息的程…

动态规划算法OJ刷题(3)

CC19 分割回文串-ii 问题描述 给出一个字符串s,分割s使得分割出的每一个子串都是回文串。计算将字符串s分割成回文串的最小切割数。例如:给定字符串s“aab”,返回1,因为回文分割结果[“aa”,“b”]是切割一次生成的。 解题思路 方法1&…

计算机操作系统(第四版)第四章存储器管理—课后习题答案

1.为什么要配置层次存储器? (1)设置多个存储器可以使存储器两端的硬件能并行工作。 (2)采用多级存储系统,特别是Cache技术,这是一种减轻存储器带宽对系统性能影响的最佳结构方案。 (3)在微处理机…

《Java8实战》第5章 使用流

上一章已经体验到流让你从外部迭代转向内部迭代。 5.1 筛选 看如何选择流中的元素:用谓词筛选,筛选出各不相同的元素。 5.1.1 用谓词筛选 filter 方法,该操作会接受一个谓词(一个返回boolean 的函数)作为参数&am…

MySQL数据库:聚合函数、分组查询、约束、默认值设置、自增属性

一、聚合函数 1.聚合函数 在MySQL数据库中预定义好的一些数据统计函数。 2.count(*) 功能:统计结果条数。 3.sum(字段名) 功能:对指定字段的数据求和。 4.avg(字段名) 功能:对指定字段的数据求平均值。 5.max(字段名) 和 min(字段名) …

正则化的基本认识

正则化(一) 拟合与欠拟合(二) 正则化的目的(三) 惩罚项(3.1)常用的惩罚项:(3.2)L-P范数:(3.3)L1与L2的选择:(一) 拟合与欠拟合 欠拟合: 是指测试级与训练集都…

docker目录映射

docker 常用命令 docker ps // 查看所有正在运行容器 docker stop containerId // containerId 是容器的ID docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID docker stop $(docker ps -a -q) // stop停止所有容器 docker rm $(docker ps -a -q) // remove删…

受害者有罪论——如何反驳

目录 一、那些「受害者有罪论」的说法 二、「受害者有罪论」的潜台词 三、如何反驳 反驳1:让受害者有罪论者感同身受 反驳2:说理 反驳3: 直接指出结论的错误 反驳4:与对方无关,不用多费唇舌 四、罪犯就是罪犯&…

golang-gin框架入门

基础 快速入门 gin完整支持路由框架支持全局异常(错误)处理内置渲染高可扩展 组件 在gin框架中四个基本组件是: Engine:是web server的根数据结构,也是基础容器;它包含复用器、中间件和配置设置。类似S…

GC 垃圾回收算法、垃圾回收器及 JVM 调优【JVM知识点-resu】

JVM知识点 详情请见:垃圾回收算法、垃圾收集器详情请见:JVM调优 1 GC垃圾回收算法 众所周知,Java的内存管理是交由了JVM,那么程序时时刻刻都在产生新对象,为了避免内存溢出,此时必然会涉及到垃圾回收&…