当前位置: 首页 > news >正文

c语言中getchar()

c语言getchar()的用法:

1.从缓冲区读走一个字符,相当于清除缓冲区

2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误

3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)

getchar()使用不方便,解决方法:
(1)使用下面的语句清除回车:

while(getchar()!='\n')

getchar()函数执行一次会从键盘缓冲区(如果有内容就读取,没有内容就等待用户输入并以回车结束,回车相当于加上一个换行符\n)顺序读取一个字符并返回此ASCII码,举个例子:当我们调用一次getchar()时,然后输入abc并回车,此时abc和\n才一起送入了键盘缓冲区,总共就是4个字符。而此时getchar()由于只运行了一次,所以取到的是a,剩下缓冲区的字符就是bc\n 源程序里while(getchar()!=’\n’)意思就是一个一个字符读取,直到碰到\n也就是回车就停止(当然\n也就不会被计入累加值)。我们在执行此程序时很直观的感受是输入完一个句子,然后回车马上print,其实回车之后又根据句子长度执行了N次
(2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>
4.getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。实际上是 输入设备->内存缓冲区->程序getchar你按的键是放进缓冲区了,然后供程序getchar
你有没有试过按住很多键然后等一会儿会滴滴滴滴响,就是缓冲区满了,你后头按的键没有存进缓冲区.
键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到’\n’.要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符.如果需要取消’\n’的影响,可以用getchar();来清除,这里getchar();只是取得了’\n’但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符.还要注意的是这里你在键盘上输入ssss看到的回显正是来自于getchar的作用,如果用getch就看不到你输入了什么。
总结:回车键顶替了输入字符的第一个字符,如果不添加getchar();就会输出错误。

 

相关文章:

  • C语言-static的作用
  • C语言-2019年九1
  • C语言-2019年九题2
  • C语言-2018年第九题1
  • C语言比Java、Python高效
  • C语言-比较字符串是否相等
  • C语言里指针和引用的区别
  • 大数据平台数据集市
  • 认证SQL基础知识
  • Caused by: java.lang.IllegalArgumentException:LoggerFactory is not a Logback LoggerContext but Logba
  • C语言-快速排序
  • JAVA实现-URL短网址生成算法
  • JAVA-字符串连续出现字母进行压缩
  • C语言-字符串连续出现字母进行压缩
  • C语言数组引用
  • 08.Android之View事件问题
  • Flex布局到底解决了什么问题
  • Intervention/image 图片处理扩展包的安装和使用
  • java小心机(3)| 浅析finalize()
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • leetcode98. Validate Binary Search Tree
  • Logstash 参考指南(目录)
  • PAT A1092
  • select2 取值 遍历 设置默认值
  • web标准化(下)
  • 使用API自动生成工具优化前端工作流
  • 王永庆:技术创新改变教育未来
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在Mac OS X上安装 Ruby运行环境
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 正则表达式-基础知识Review
  • # Java NIO(一)FileChannel
  • #define、const、typedef的差别
  • #pragma pack(1)
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (39)STM32——FLASH闪存
  • (Java)【深基9.例1】选举学生会
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)iOS字体
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • ./和../以及/和~之间的区别
  • .mysql secret在哪_MySQL如何使用索引
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .net程序集学习心得
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET企业级应用架构设计系列之结尾篇
  • @property括号内属性讲解
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [Android]通过PhoneLookup读取所有电话号码
  • [C#]C#学习笔记-CIL和动态程序集