• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > GetChar缓存机制深入剖析

GetChar缓存机制深入剖析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了getchar,getchar用法,getchar函数,getchar是什么意思,c getchar等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

与缓存区相关最常见的操作就是字符的输入与输出操作getchar,getc,getch,getche,gets系列函数。

第一个例子(与getchar有关):

解释如下:getchar定义在stdio.h文件中,我们在stdio.h中可以找到其相关的定义:

Stdio.h中:

</div>
从FILE结构中我们可以得到了上面getc宏定义中使用的_cnt,_ptr成员,但这些都是次要的,我们应该不难发现有这样几个成员_bufsize,_base分别对应的是缓冲区大小,缓冲区基地址,从这里得到一个显而意见的结论就是getchar函数使用了缓冲机制。(_cnt对应的是缓冲区的输入的字节数目,_ptr对应的是读指针的位置)

getc宏定义详解

好了,讲了这么多都是铺垫,现在回到正题为什么会出现上述结果:)

出现上述结果追根结底还是由于getchar函数使用了缓冲(看了上面的,我想大家也知道了,确实使用了缓冲),当输入一个字符按下回车后程序没有等待你二次输入就结束了,而且无论输入什么运行结果均是10,这是因为当用户输入了一个字符后,并按下回车后,缓冲中会存入用户输入的字符以及换行键的ASCII码(10 ~)【略去的回车的ASCII码13,可能是为了跨平台,在Linux下,回车后就是换行10,Windows下回车是先回车回到首行,再换行,即13 10】(执行第一次getchar实际上是执行getc的else语句,填充缓存区后_cnt=2,_prt指向0位置,执行完后_cnt=1,_prt指向1位置),第二次执行getchar时,调用getc不会再执行else语句,执行的是if语句,故第二次不再等待用户输入了,直接执行,执行后cnt=0,prt指向位置2,并返回ptr指向位置1时的结果,即10,由于10为换行键,当执行遇到此时,会在执行完后清空缓存,ptr重新指向了位置0,cnt=0。

当输入abc的时候分析一样,只不过扫行了第二个getchar后,cnt=2,ptr指向了位置2。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c语言中getch,getche,getchar的区别
  • GetChar缓存机制深入剖析

相关文章

  • 2022-04-30C语言函数指针(指向函数的指针)详解
  • 2017-05-28c语言实现的带通配符匹配算法
  • 2017-05-28浅谈在函数中返回动态的内存
  • 2017-05-28基于C++实现的线程休眠代码
  • 2017-05-28Windows程序内部运行机制实例详解
  • 2017-05-28C语言中怎么在main函数开始前执行函数
  • 2017-05-28C语言中将日期和时间以字符串格式输出的方法
  • 2017-05-28解析c中stdout与stderr容易忽视的一些细节
  • 2017-05-28基于Sizeof与Strlen的区别以及联系的使用详解
  • 2017-05-28深入解析C++的WNDCLASS结构体及其在Windows中的应用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 实现posix消息队列示例分享
    • 用VC++6.0的控制台实现2048小游戏的程序
    • 关于win32 gettimeofday替代方案
    • C++ 迷宫游戏实现代码
    • 用C语言举例讲解数据结构中的算法复杂度结与顺序表
    • 实现opencv图像裁剪分屏显示示例
    • C++中异常处理的基本思想及throw语句抛出异常的使用
    • 深入理解Java事务的原理与应用
    • tc编译的dos程序和vc编译的win32控制台程序的异同
    • c语言二进制数按位输出示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有