关于scanf("%c",&ch)直接跳过的问题 - zy799894671的专栏 - 博客频道 - CSDN.NET
来源:互联网 发布:淘宝靠谱香水店铺 编辑:程序博客网 时间:2024/05/17 03:20
过去上论坛,还有最近写程序,老是有人遇到这样的问题:就是有时候scanf("%c",&ch)本应该阻塞等待用户输入一个char型数据的,但为什么会跳过呢?
纠其根源,我们先来了解一下scanf()是怎么接受数据的。
首先,当我们的pc指向scanf这句时,系统并不是等待用户输入,而是判断输入缓冲区有没有符合格式的内容,如果有,则直接读取。
知道了这个,我就应该明白,scanf("%c",&ch);不是没有读到数据,而是读到了我们不知道的数据。
那问题又来了,它读到了什么??
好吧,这就要说到行缓存;
我们用scanf()的时候都要按下enter键,那enter键按了之后去哪儿了??
好吧,问题基本应该知道了,enter键也进入了输入缓存区,也就是scanf("%c",&ch);
读到了'\n';
解决办法,很简单,既然缓存区有东西,那我们就清空它呗~~
setbuf(stdin,NULL);(这个windows和linux下都可以)
fflush(stdin);(这个只能windows);
0 0
- 关于scanf("%c",&ch)直接跳过的问题 - zy799894671的专栏 - 博客频道 - CSDN.NET
- scanf("%c",&ch)直接跳过的问题
- 关于scanf("%c",&ch)直接跳过的问题
- 嵌入式 关于scanf("%c",&ch)实现拦截时候出现直接跳过的问题
- MongoDB 无法启动 - wzm112的专栏 - 博客频道 - CSDN.NET
- SDIO驱动总结 - Dybinx的专栏 - 博客频道 - CSDN.NET
- SDIO总线 驱动 - Dybinx的专栏 - 博客频道 - CSDN.NET
- QThread 正确使用方法 - tangaowen的专栏 - 博客频道 - CSDN.NET
- PrintStream: - shichunle的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/shichunle/article/details/6754930
- java.ByteArrayInputStream与ByteArrayOutputStream再次理解 - CodeAnt的专栏 - 博客频道 - CSDN.NET http://blog.csdn.
- 提问的艺术(中文版) - 烂笔头的专栏 - 博客频道 - CSDN.NET
- 提问的艺术(中文版) - 烂笔头的专栏 - 博客频道 - CSDN.NET
- jsp中<%%> 与<%!%> , <%%>与<%=%>的区别是什么? - u013305082的专栏 - 博客频道 - CSDN.NET
- csdn如何转载别人的文章 - jiangping_zhu的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/jiangping_zhu/article/detail
- Tomcat部署Web应用方法总结 - yangxueyong的专栏 - 博客频道 - CSDN.NET
- wifi driver 学习笔记 - gangyanliang的专栏 - 博客频道 - CSDN.NET
- Android使用自带JSONObject解析JSON数据 - jCuckoo的专栏 - 博客频道 - CSDN.NET
- 5分钟搞定内存字节对齐 - hairetz的专栏 - 博客频道 - CSDN.NET
- poj1698 - Alice's Chance (最大流)
- Hashtable类中的四种遍历方法对比
- OCP-1Z0-053-V13.02-705题
- Windows7 管理员administrator帐号开启方法
- JavaBean是什么
- 关于scanf("%c",&ch)直接跳过的问题 - zy799894671的专栏 - 博客频道 - CSDN.NET
- 字符串的全排列与组合算法
- dbcp连接池
- 【Linux C】进程控制
- Linux Core Dump
- BeagleBone Black上安装debian
- Linux进程间通信--信号,管道,消息队列,信号量,共享内存,socket
- oracle比较两个字符串的相似度
- 过河问题