如何处理scanf()函数误输入造成程序死锁或出错(fflush(stdin))
2016-05-05 10:56
513 查看
对于C语言的萌新来说,在写scanf时或许会碰上输入的值不符合规定,导致程序死锁或出错,导致接下来的输入无法正确输出。
这个问题的产生是由于scanf的原理,当你输入一个错误的值的时候,这个值无法进入正确的地方,它会在缓冲区待命,等待有适合它的地区出现,这个区域一出现,它便会优先占领这个区域,导致接下来的输入错误。
解决这个办法其实很简单,只需要调用fflush(stdin)这个函数,这个函数的功能是清空输入缓冲区,这个函数通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)。有了这个函数,再加上判断语句,就能够很好的解决这个问题了。
注意:此函数仅适用于部分编译器(如VC6),但是并非所有编译器都支持这个功能(如gcc3.2)。这是一个对C标准的扩充。
这个问题的产生是由于scanf的原理,当你输入一个错误的值的时候,这个值无法进入正确的地方,它会在缓冲区待命,等待有适合它的地区出现,这个区域一出现,它便会优先占领这个区域,导致接下来的输入错误。
解决这个办法其实很简单,只需要调用fflush(stdin)这个函数,这个函数的功能是清空输入缓冲区,这个函数通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)。有了这个函数,再加上判断语句,就能够很好的解决这个问题了。
注意:此函数仅适用于部分编译器(如VC6),但是并非所有编译器都支持这个功能(如gcc3.2)。这是一个对C标准的扩充。
相关文章推荐
- freemarker在textarea中正确显示换行
- Mybatis打印sql预计log4配置
- 带你走进分辨率/像素的世界
- zeromq系列
- Android-VitaMio框架使用记录
- Qt信号与槽关联的问题
- http状态码
- 经典提升算法——Adaboost
- 使用keepalived实现mysql主从复制的自动切换
- <软件体系结构>实验框架选择及其说明
- cocos-creator之setPosition坑
- Let there be Color!: Automatic Image Colorization with Simultaneous Classification - sig - 2016
- Android 通过Socket 和服务器通讯
- lucene学习笔记
- Pip安装
- log4j.properties配置详解
- ThinkPHP 项目目录结构
- java 数组之间的转换
- iOS 后端云服务
- linux 命令行wget直接安装jdk8