



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C C 清空输入流清空输入流的小技巧的小技巧 1 为什么 fflush stdin 是错的 首先请看以下程序 include int main void int i for fputs Please input an integer stdout scanf d printf d n i return 0 这个程序首先会提示用户输入一个整数 然后等待用户输入 如果用户输入的是整数 程序会输出 刚才输入的整数 并且再次提示用户输入一个整数 然后等待用户输入 但是一旦用户输入的不是整数 如小数或者字母 假设 scanf 函数最后一次得到的整数是 2 那么程序会不停地输出 Please input an integer 2 这是因为 scanf d 只能接受整数 如果用户输入了字母 则这个字母会遗留在 输入缓冲区 中 因为缓冲中有数据 故而 scanf 函数不会等待用户输入 直接就去缓冲中读取 可是缓 冲中的却是字母 这个字母再次被遗留在缓冲中 如此反复 从而导致不停地输出 Please input an integer 2 也许有人会说 居然这样 那么在 scanf 函数后面加上 fflush stdin 把输入缓冲清空掉不 就行了 然而这是错的 C 和 C 的标准里从来没有定义过 fflush stdin 也许有人会说 可是我用 fflush stdin 解决了这个问题 你怎么能说是错的呢 的确 某些编译器 如 VC6 支持用 fflush stdin 来清空输入缓冲 但是并非所有编译器都要支持这个功能 linux 下的 gcc 就不支持 因为标准中根本 没有定义 fflush stdin MSDN 文档里也清楚地写着 fflush on input stream is an extension to the C standard fflush 操作输入流是对 C 标准的扩充 当然 如果你毫不在乎程序的移植性 用 fflush stdin 也没什么大问题 以下是 C99 对 fflush 函数的定义 int fflush FILE stream 如果 stream 指向输出流或者更新流 update stream 并且这个更新流 最近执行的操作不是输入 那么 fflush 函数将把这个流中任何待写数据传送至 宿主环境 host environment 写入文件 否则 它的行为是未定义的 原文如下 int fflush FILE stream If stream points to an output stream or an update stream in which the most recent operation was not input the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file otherwise the behavior is undefined 其中 宿主环境可以理解为操作系统或内核等 由此可知 如果 stream 指向输入流 如 stdin 那么 fflush 函数的行为是不确定的 故而使 用 fflush stdin 是不正确的 至少是移植性不好的 2 清空输入缓冲区的方法 虽然不可以用 fflush stdin 但是我们可以自己写代码来清空输入缓冲区 只需要在 scanf 函数后 面加上几句简单的代码就可以了 C 版本 include int main void int i c for fputs Please input an integer stdout scanf d if feof stdin ferror stdin 如果用户输入文件结束标志 或文件已被读完 或者发生读写错误 则退出循环 do something break 没有发生错误 清空输入流 通过 while 循环把输入流中的余留数据 吃 掉 while c getchar n 使用 scanf n 也可以清空输入流 不过会残留 n 字符 printf d n i return 0 C 版本 include include 为了使用 numeric limits using std cout using std endl using std cin using std numeric limits using std streamsize int main int value for cout value if cin eof cin bad 如果用户输入文件结束标志 或文件已被读完 或者发生读写错误 则退出循环 do something break 读到非法字符后 输入流将处于出错状态 为了继续获取输入 首先要调用 clear 函数 来清除输入流的错误标记 然后才能调用 ignore 函数来清除输入流中的数据 cin clear numeric limi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保险事故车辆推定全损理赔协议书8篇
- 2025年河北秦皇岛工业职业技术学院招聘专任教师3人考前自测高频考点模拟试题及答案详解(夺冠)
- 2025福建医科大学安全保卫人员招聘2人(五)考前自测高频考点模拟试题及参考答案详解1套
- 2025年中国精算师协会会员水平测试(准精算师数学)全真模拟试题及答案
- 2025-2030工业气体供应行业市场现状政策支持及商业模式创新评估分析报告
- 碎石、石粉购买协议6篇
- 2025-2030工业机器人核心技术突破与制造业转型升级战略研究报告
- 2025广西河池市凤山县农业农村局招募水稻等产业特聘农民技术员2人考前自测高频考点模拟试题及答案详解(新)
- 2025-2030工业机器人市场供需格局与核心技术突破方向报告
- 2025-2030工业机器人产业市场供需分析及投资评估研究报告
- 2025秋人教鄂教版(2024)科学一年级第一单元走近科学《1“钓鱼”游戏》 教学设计
- 2026届高考物理一轮复习策略讲座
- DB31/T 1173-2019咖啡厅(馆)等级划分与评定
- 全桥LLC自动计算表格
- 露天矿土石方剥离施工方案
- 魔芋怎么种?魔芋的种植技术
- GB/T 26766-2011城市公共交通调度车载信息终端
- GB/T 19658-2013反射灯中心光强和光束角的测量方法
- 工贸行业重大生产安全事故隐患判定标准解读课件
- 第7章-测向原理-课件
- 三相异步电动机正反转控制
评论
0/150
提交评论