getchar与putchar用法及缓冲区详解

article/2025/3/9 21:02:25

一. getchar和putchar库函数的用法


1.1getchar库函数的用法

getchar 库函数的定义:int getchar (void)

  • 使用getchar库函数的前提是引用#include <stdio.h>头文件
  • getchar函数是输入字符函数(终端输入),每一次执行只读取一个字符。若输入多个字符时:例:1234,就只会读取一个字符‘1’,下一次调用,则读取字符’2’,依次往后。
  • getchar函数的返回值类型是int类型,当getchar函数接收到一个字符时,它会把它转换成对应的ASCll码值,再返回。
  • 当getchar函数读取字符失败或者结束时,会返回EOF(即为-1)。
  • getchar函数会读取回车符’\n’的

1.2putchar库函数的用法

putchar 库函数的定义:int putchar (int character)

  • 使用putchar库函数的前提是引用#include <stdio.h>头文件
  • putchar函数接收的是介于0~127之间的十进制整型数的ASCll码值。
  • putchar函数会把接收到字符的ASCll码值输出为对应的字符。
  • 当putchar输出字符失败或者结束时,会返回EOF(即为-1)。

1.3getchar和putchar库函数的代码实例

为了让友友萌更好的理解他们的用法,我们可以实际操作一下
实例1

#include <stdio.h>
int main()
{int ch = getchar(); //输入字符‘A’putchar(ch);        //打印字符‘A’return 0;
}

程序运行时输入:A
输出结果:A

A         
A 
按任意键关闭此窗口. . .     

实例2(多组输入+循环的实例,很好的运用了getchar返回值的特性)

//实例2(多组输入+循环)
#include <stdio.h>
int main()
{int ch = 0;while ((ch = getchar()) != EOF)   //多组输入{putchar(ch);    //输出字符}return 0;
}

程序运行时输入:abc1
输出结果:abc1 _

abc1
abc1
_    //注意getchar也是会把换行符读进去的,所以光标在下面一行按任意键关闭此窗口. . .     

实例2要注意的是,当输入abc1\n时,函数是一个一个从终端(键盘)上读取的(其实是从缓冲区上读取的),读一个打印一个,并且还会把’\n’回车符打印出来,所以结果如上面所示的光标在下面一行。

二. scanf和getchar函数的缓冲区


2.1关于缓冲区代码的错误实现

先看如下输入密码和确认密码功能的实现的代码

#include <stdio.h>
int main()
{char a =0;printf("请输入密码:--->");scanf("%d", &a);           printf("请确认密码:--->");int ch = getchar();if (ch == 'Y')printf("确认成功\n");elseprintf("确认失败\n");return 0;
}

想问问大家,这种代码能到达我们想要的效果吗?当然不能。
程序运行时输入:Y
输出结果:

请输入密码:--->Y
请确认密码:--->确认失败按任意键关闭此窗口. . . 

2.2关于缓冲区代码的正确实现

为什么会不让我确认密码,就直接输出确认失败并且结束程序了呢?不慌,小超会详细的讲解,没听懂你打我hhh。


1. 首先我们要了解缓冲区的概念,即当我们在键盘上输入数据后,系统会帮我们把数据先存储到缓冲区中,然后再通过getchar和scanf函数取走。当我们调用scanf和getchar时,系统会帮我们看缓冲区里有没有数据,如果有,,就会直接读取,不用再等待终端输入了

2. 其次对照上述实例中scanf相关代码

	char password[20]={0};printf("请输入密码:--->");scanf("%d", &password);

当我们输入abc1\n时,系统会先把字符串存储到缓冲区,然后scanf函数才会读取缓冲区中\n之前的字符串
注意:这时候缓冲区里面还存储着一个回车符:\n呢。过程详情如下图所示:

在这里插入图片描述

3. 最后对照上述代码中getchar相关代码

    printf("请确认密码:--->");int ch = getchar();

当我们调用getchar函数时,系统会帮我们看缓冲区里有没有数据,这是缓冲区里有一个字符’\n’,则会直接读取这个字符,即ch = '\n’,所以直接确认失败。过程详情如下图所示:

缓冲区 2
4.根据上述的缓冲区的原理,应该如何更改我们的代码,来实现我们想要的功能呢?小超粉萌肯定想到了,只要在执行getchar函数之前把缓冲区里的数据清空(即全部拿出来),getchar函数就可以正常读入了

#include <stdio.h>
int main()
{char a = 0;printf("请输入密码:--->");scanf("%d", &a);while (getchar() != EOF)    //清空缓冲区里的所有数据!!!{;}printf("请确认密码:--->");int ch = getchar();if (ch == 'Y')printf("确认成功\n");elseprintf("确认失败\n");return 0;
}

三. 总结

总的来说,对于初学者而言,getchar和putchar字符函数的用法是难以理解的,特别是其中它们的接收值返回值。而且在运用getchar输入字符函数时,一定要谨慎缓冲区的存在,在必要的情况下要清空缓冲区。本文包含了所有相关要点,希望可以帮到你们,若还有什么疑惑,欢迎私信或者评论喔。


http://chatgpt.dhexx.cn/article/c9gZIbCj.shtml

相关文章

c语言putchar作用和用法,转:c语言EOF是什么?(及getchar()和putchar用法)

我学习C语言的时候&#xff0c;遇到的一个问题就是EOF。 它是end of file的缩写&#xff0c;表示"文字流"(stream)的结尾。这里的"文字流"&#xff0c;可以是文件(file)&#xff0c;也可以是标准输入(stdin)。 比如&#xff0c;下面这段代码就表示&#xf…

getchar与putchar用法

#include<stdio.h>main(){int i;igetchar();//相当于char i;scanf("%c",&i); putchar(i);//相当于printf("%c",i); 需要i是字符才能输出不能是变量printf("\n");printf("%d",i);}输出结果一致 #include<stdio.h>main…

拼多多无货源店群项目

在当下,单纯的工资收入难以支撑起飞升的物价时,额外收入成了绝大部分人用来对抗生活压力的最好帮手,这话是没错,我身边也有很多斜杠青年也确实因为副业做得好,生活衣食无忧,惬意潇洒。现在随着电商行业的发展,越来越多的人会选择拼多多开店,选择做无货源模式。 其实拼多…

拼多多无货源模式新玩法(采集淘宝天猫京东等平台商品上传拼多多店铺)

给大家展示一个全新的拼多多电商模式&#xff0c;别眨眼&#xff0c;别浪费时间&#xff0c;看完还不明白来打我&#xff01; &#xff01; &#xff01; 1&#xff1a;无货源业务模式及收入介绍 开店后&#xff0c;我们将经营店铺。 我们做的是无货源模式。 我们不需要预付钱…

2022年拼多多无货源店群系列课,怎么做拼多多无货源店铺

2022年拼多多无货源店群系列课&#xff0c;新手怎么做拼多多无货源店铺 2022年拼多多无货源店群系列课 ├┈1.拼多多店群系列课介绍.mp4 ├┈10.拼多多店群怎么避免违规.mp4 ├┈11.拼多多店群当下流行的方法全面解析.mp4 ├┈12.拼多多店群精细化玩法.mp4 ├┈13.拼多多店…

做拼多多店群有哪些需要注意的地方?经验分享

拼多多无货源店群 无货源店群这是一种新型的电商玩法。 无货源并不是真的没有货源,如果真的按照字面意思去理解,那就大错特错了!只是我们不用再为货源的事情去操心。 所有的商品都是采集自全网的爆款商品,不用自己囤货,当然也省去了囤货的资金。 传统电商卖家关注的流…

尚呈电商:拼多多店群玩法怎么操作?

大家都知道店群一说&#xff0c;因为现在店群也是被平台打败的&#xff0c;就那种老式的店群玩法就比较难玩了&#xff0c;很多新手都想知道具体是怎么操作的&#xff0c;下面就和尚呈电商一起来看看吧! 你是利用平台对于这种新品流量扶持&#xff0c;比如说你上一个新品&#…

拼多多店群被割N次韭菜,终于测试出一个接近100%成功率的起店方法,日出百单!

距离我上次发表关于拼多多店群的文章已经是两年多了&#xff0c;目前来说拼多多店群的热度已经褪去了&#xff0c;许多做网赚割韭菜的培训机构也转向其他项目&#xff0c;但仍然还存在许多割韭菜的团队&#xff0c;这也导致了提起拼多多店群大家都觉得是韭菜项目的原因。 在这…

关于 Pycharm 2019.2 版本出现等宽字体对不齐的问题的解决方法

我使用的是更纱黑体 (Sarasa Term SC Medium). 从 Pycharm Community 2019.1 升级到 2019.2.3 后出现了如下图问题: 解决方法如下: 打开 Pycharm 设置中心, 切换到 “Appearance & Behavior > Appearance”, 将 “Antialiasing” (抗锯齿) Editor 选项改为 “Greysca…

cmd字体推荐-更纱黑体

网上看到的可应用于cmd/powershell的字体&#xff0c;用了后无法自拔&#xff0c;推荐一下&#xff0c;效果如图 下载链接&#xff1a;更纱黑体

命令行字体推荐-更纱黑体

网上看到的可应用于powershell的字体&#xff0c;用了后无法自拔&#xff0c;推荐一下&#xff0c;效果如图 链接&#xff1a;更纱黑体 https://github.com/be5invis/Sarasa-Gothic cmd上应用字体好像有点问题&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&am…

linux比windows丑,告别 Windows 难看难用,教你打造体验不输 macOS 和 Linux 的终端

终端&#xff0c;是用户与操作系统进行交互的最原始的输入输出环境&#xff0c;也是执行一些高级系统操作的必要工具。而 Windows 的终端「小黑框」&#xff0c;一直给大家一种「难看难用」的印象。接下来&#xff0c;我将介绍一些小方法&#xff0c;来对 Windows 的终端环境进…

PowerShell、CMD 和 Windows Terminal 的美化配置方法

PowerShell、CMD 和 Windows Terminal 的美化配置方法 众所周知&#xff0c;Windows 10 自带的 PowerShell 和 CMD 默认界面有点不忍直视&#xff0c;且显示中文时会发生乱码现象。现分享一下 PowerShell、CMD 的美化方法&#xff0c;以及替代方案 Windows Terminal 的配置方法…

linux终端字体放大_5 个 PowerShell 主题,让你的 Windows 终端更好看

在上一篇文章中&#xff0c;我们介绍了如何将 PowerShell 的终端变得漂亮起来。在这一篇文章中&#xff0c;我将为大家介绍如何定制 PowerShell 中的 Prompt 单元&#xff0c;并推荐 5 个赏心悦目的 Prompt&#xff08;命令提示符&#xff09;主题。 推荐阅读&#xff1a;告别 …

【操作系统实践】深度操作系统

——Linux is free,if your time is free. 目录 一、前言二、deepin操作系统实践大纲1、硬件设备保障2、系统使用及美化3、软件应用安装落地4、进一步开发 三、深度操作系统deepin四、基于vmware的安装及双系统安装五、硬件设备保障1、网卡问题2、声卡问题及更普适的驱动问题 六…

c++调用powershell_告别 Windows 终端的难看难用,从改造 PowerShell 的外观开始

终端&#xff0c;是用户与操作系统进行交互的最原始的输入输出环境&#xff0c;也是执行一些高级系统操作的必要工具。而 Windows 的终端「小黑框」&#xff0c;一直给大家一种「难看难用」的印象。接下来&#xff0c;我将介绍一些小方法&#xff0c;来对 Windows 的终端环境进…

个性化-字体

本文具有极强的主观性&#xff0c;但也希望可以给大家提供些许帮助 1. 字体选择标准 用于代码的字体&#xff1a;可以区分明确区分 1lI 和 0Oo具有明确的开源许可协议&#xff08;一般为 SIL Open Font License 1.1 或 IPA Font License 1.0&#xff09;听闻部分字体会对特定像…

你可能用得上的 N 款免费/开源中文字体

除了电脑中那些默认的千篇一律的字体以外&#xff0c;你还知道什么字体&#xff1f;有好用的吗&#xff1f;在网上下载的字体&#xff0c;怕不怕一不小心就侵权了&#xff1f; 现在不用怕了&#xff0c;本文收集了一些免费/开源的中文字体&#xff0c;都是个人免费使用的&#…

linux安装完windows字体以后 特别难看,告别 Windows 终端的难看难用,从改造 PowerShell 的外观开始...

原标题&#xff1a;告别 Windows 终端的难看难用&#xff0c;从改造 PowerShell 的外观开始 终端&#xff0c;是用户与操作系统进行交互的最原始的输入输出环境&#xff0c;也是执行一些高级系统操作的必要工具。而 Windows 的终端「小黑框」&#xff0c;一直给大家一种「难看难…

超级强大服务器终端,告别 XShell 打造强大的Windows 终端

不同于mac OS及Linux的终端&#xff0c;window的cmd想来很难用&#xff0c;为了连接服务器&#xff0c;很多人首先都会用xshell&#xff0c;但是第一界面就很难看&#xff0c;而且试用期过了后很麻烦&#xff0c;这里我找到一款很不错的工具。 Console、Terminal 和 Shell 的区…