目录

1.getchar()函数

2.putchar()函数

3.清空缓冲区

3.1   什么是缓冲区

3.2   场景

3.3   问题分析

3.4   改进(即清空缓冲区)


1.getchar()函数

1.int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数(返回字符的ASCII码值)。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。

2.读取失败or遇到文件末尾是返回EOF。

ch = getchar() 和 scanf("%c", &ch); 语句效果相同

2.putchar()函数

1.int putchar(int c) 函数把字符(或者你想返回字符对应的ASCII码值)输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。

putchar(ch) 和 printf("%c", ch); 语句效果相同

3.清空缓冲区

3.1   缓冲区

1.什么是缓冲区?

用户输入的字符被收集并储存在一个被称为缓冲区的临时存储区,按下Enter键后,程序才可以使用用户输入的字符。

2.为什么要有缓冲区?

首先,把若干字符作为一个块进行传输比逐个发送这些字符节约时间;

其次,如果用户打错字符,可以直接通过键盘修正错误,当最后按下Enter键时,传输的是正确的输入。

3.2   场景

#include<stdio.h>int main()
{char password[20];printf("请输入密码->");scanf("%s", password); //数组名不需要使用取地址符&printf("请确认Y/N:");int ch = getchar();if ('Y' == ch) {printf("确认成功\n");}else {printf("确认失败\n");}return 0;
}

输出结果:

3.3   问题分析

1.从输出结果我们可以看出:在我们输入密码之后,我们并未选择确认,程序就直接认定我们确认失败。

2.问题原因:scanf 与 getchar 都是从缓冲区中获取内容,但是关键来了:scanf函数在我们输入完毕后按下Enter键(或者是空格)后方才停止输入,此时scanf中的password拿走了密码123456,但是后面你敲的回车键转变成字符 ' \n ' 被ch = getchar()拿走,也就是说ch = ' \n '肯定不等于' Y ',所以直接输出确认失败。

3.4   改进(即清空缓冲区)

1.由3.3分析可知,密码确认的失败主要是因为getchar读取的  ' \n ' 导致,因此,我们需要清空缓冲区,即scanf读取后缓冲区剩余字符我们需要清空。

#include<stdio.h>int main()
{char password[20];printf("请输入密码->");scanf("%s", password); //数组名不需要使用取地址符&getchar();      //这里我又加了一个getchar(),这样\n就被去掉了printf("请确认Y/N:");int ch = getchar();if ('Y' == ch) {printf("确认成功\n");}else {printf("确认失败\n");}return 0;
}

2.缓冲区字符较多,如何清空?

①还是上面的代码,比如输入123456  abcd,在6后面我输入了一个空格,此时scanf只读取到6,则缓冲区还剩下abcd\n五个字符,但是getchar()一次只能去除一个,则我们需要通过循环的方式,逐步去除缓冲区中所有的剩余字符。

②代码演示:

#include<stdio.h>int main()
{char password[20];printf("请输入密码->");scanf("%s", password); //数组名不需要使用取地址符&int ch = 0;while (ch = getchar() != '\n') {;}printf("请确认Y/N:");ch = getchar();if ('Y' == ch) {printf("确认成功\n");}else {printf("确认失败\n");}return 0;
}

运行结果:

这样我们就达到了一个清空缓冲区的效果!

C getchar putchar函数相关推荐

  1. C语言中的 gets,puts,getchar,putchar函数解析

    写在前面: 刚开始学习C语言的同学,都会遇到这么几个输入输出函数,并且会很容易误用,错用,导致最终的出错.因此我们需要整体的学习一下这几个函数,下面就让我们一起来学习吧... 一.getchar函数 ...

  2. C语言学习之编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符

    编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符.思考以下问题: (1)变量cl和c2应定义为字符型,整型还是二者皆可? (2)要求输 ...

  3. C语言getchar()和putchar()函数

    前言: getchar()和putchar()函数都是单字符函数I/O,每次只能处理一个字符.getchar()是输入,putchar()是输出. 在了解函数之前先说一下缓冲区,什么是缓冲区?用户输入 ...

  4. getchar和putchar函数详解

    字符在C语言出现时用'  '标志起来,并且字符在C语言中以ASCIL码形式存储 'a'--97二者意思相同 getchar函数:int  getchar(void): 该函数读取标准输入(键盘输入), ...

  5. C语言中get_put函数详解,C语言第五课之getchar函数和putchar函数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 getchar函数也就是键盘输入函数,这个函数和scanf函数不一样!getchar函数没有scanf函数灵活.下面就给大家介绍下getchar函数的介绍 ...

  6. C语言字符变量输出值,C语言,交换任意两个字符型变量的值并输出结果。要求:利用getchar和putchar函数。...

    C语言,交换任意两个字符型变量的值并输出结果.要求:利用getchar和putchar函数.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶 ...

  7. C语言中getchar()和putchar()函数

     目录: 1.getchar()和putchar()函数的定义. 2.getchar()函数为什么用int定义返回值类型. 3.函数getchar()和函数scanf()的工作原理. 一.getcha ...

  8. C/C++ putchar函数 - C语言零基础入门教程

    目录 一.前言 二.putchar 函数简介 三.putchar 函数使用 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.前言 C ...

  9. 【初识C语言】putchar函数

    目录 前言 putchar函数简单介绍 putchar函数的简单使用 前言 在C语言中,putchar函数与getchar函数类似,它们两个常常搭配使用.getchar函数从控制台获取我们的输入字符, ...

最新文章

  1. MongoDB 安装配置
  2. 留还是走?如何做不确定时代下的最难选择
  3. antd 表单域验证规则 - 只能输入数字字符,去除前导0
  4. oracle 119(11.2.0.4),ORACLE 从 11.2.0.1 升级到 11.2.0.4 版本之ORA-00119问题处理纪实
  5. 最短路径问题 图论
  6. 机器学习基础(二十五)—— Feature Selection
  7. 数据库—事务—并发控制技术
  8. 使用Apache poi生成excel并绘制折线统计图,扇形统计图
  9. JTextArea:文本域组件
  10. 卡塔尔世界杯出现了半自动越位识别技术、Feelix Palm、动作轨迹捕捉等黑科技,一起来看看吧。
  11. QT在windows上检测USB端口插拔
  12. LOL IXTAL CUP 第一日 冠军杯赛 407的夺冠之路
  13. Atitit r2017 r1 doc list on home ntpc.docx
  14. Python Java 滑块识别-通杀滑块
  15. IT从业者的学习规划——学习者系列文章开篇
  16. YumRepo Error: All mirror URLs are not using ftp, http[s] or file解决办法
  17. DevExpress中实现对DataTable的操作、转换
  18. depth peel_10个jQuery Page Peel插件
  19. Docker技术研究
  20. ITE平台开发 chapter5之jperf测试网络吞吐量

热门文章

  1. CSS自动换行、强制不换行、强制断行、超出显示省略号
  2. 和傻逼说话要心平气和
  3. Java 进行BCC异或校验
  4. 从大一统视角理解扩散模型(Diffusion Models)
  5. Mybatis大致框架
  6. java开发面试题库参考
  7. AutoML-第八章-TPOT
  8. CSS animation动画:实现台球运动效果
  9. 小白的数字电路逻辑设计笔记(一)----绪论
  10. 【FPGA教程案例100】深度学习1——基于CNN卷积神经网络的手写数字识别纯Verilog实现,使用mnist手写数字数据库