如何清除stdin缓存中的数据?

一。这问题没有什么很标准的做法:方法1、fflush():VC上面使用fflush()可以成功, 而在gcc上面使用fflush()却不能成功。

方法2、setbuf():虽然在gcc上面,使用这种方式确实可以清空输入流. 但不建议使用。

方法3、通过 while 循环把输入流中的余留数据“吃”掉:

int c;

while ((c=getchar()) != '\n' && c != EOF);/*可直接将这2句代码当成fflush(stdin)的替代,直接运行可清除输入缓存流*/

二。解释:1. fflush()不行的原因如下:

C-FAQ中如下:

Question 12.26

How can I flush pending input so that a user's typeahead isn't read at the next prompt? Will fflush(stdin) work?

--------------------------------------------------------------------------------

fflush is defined only for output streams. Since its definition of ``flush'' is to complete the writing of buffered characters (not to discard them), discarding unread input would not be an analogous meaning for fflush on input streams.

There is no standard way to discard unread characters from a stdio input stream, nor would such a way be sufficient unread characters can also accumulate in other, OS-level input buffers.

C标准(ISO/IEC 9899:1999 standard)规定fflush(stdin)操作是未定义的;。也就是说不一定能实现刷新功能,但有的编译器可能不遵循标准,对fflush(stdin)操作不予警告,并且有时可能产生正确的结果,但最好不要这样使用。

VC上面使用fflush()可以成功, 而在gcc上面使用fflush()却不能成功。以下是 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.setbuf()的方法也是不符合标准的. 虽然在有些场合它通过将输入设置为无缓冲形式, 以此来刷新输入流, 但是不太可靠。

虽然在gcc上面,使用这种方式确实可以清空输入流. 但不建议使用.

linux 清空stdin缓冲,清除stdin缓存中的数据相关推荐

  1. vue缓存服务器文件到本地,vue中,在本地缓存中读写数据的方法

    1.安装good-storage插件 cnpm i good-storage --save 2.读/写的方法 common/js/cache.js: import storage from 'good ...

  2. linux下去ldap数据,Linux系统下要如何修改LDAP中的数据

    在天下网吧-网吧系统-网吧天下栏目上一篇文章中,我们看到了:希望对各位网吧网管或者网吧维护,做网吧系统的各位大大有用,那么今天我们一起来看下:Linux系统下要如何修改LDAP中的数据 在之前的文章中 ...

  3. 25 Redis的缓存中的数据和数据库中的不一致问题

    25 Redis的缓存中的数据和数据库中的不一致问题 前言 一.缓存和数据库的数据不一致是如何发生的? 二.解决Redis 和数据库数据不一致的方法 总结 前言 Redis 缓存经常会遇到有 4 个方 ...

  4. 15、如何在Linux和Windows下清除DNS缓存

    由于各种原因,您可能需要刷新或清除Linux系统上的本地DNS缓存. 如何清除/刷新Linux下的DNS缓存 默认情况下,操作系统级别没有安装或启用DNS缓存,但如果安装了下面列出的任何缓存服务,请使 ...

  5. SQL Server 清空或删除所有数据库表中的数据

    方法一: --生成数据库脚本的方法最快,处理的也最好       sql2000企业管理器         --右键要清理的数据库         --所有任务         --生成SQL脚本   ...

  6. arp linux 清空_Linux怎么清理ARP缓存

    1.系统初始arp环境 [root@esx ~]# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.175 ether 00:24 ...

  7. python stdout清空_如何清除Python子进程中的stdout?

    由于两次读取之间的超时时间为2秒,ping生成的行数比读取的多.我会把os.杀死调用另一个线程,并使用主线程读取proc.stdout中的每一行:import sys, os import subpr ...

  8. yii 清除mysql缓存_Yii2开启数据表结构缓存和清除

    Yii2开启表结构缓存,因为当运用模型(model)时,AR的一些公共属性都会从DB中获取,这样会导致服务器负担一些额外的资源开销,实际上对于成品来说,服务器这些开始销是多余的,故应该阻止这种默认行为 ...

  9. java如何从缓存中读取数据_Java 缓存技术之 ehcache中读取出所有缓存名称列表数组...

    1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中.如项目已安装了 ...

  10. linux mysql ibd_MySQL:如何从ibd文件中恢复数据

    在使用独立表空间的情况下,如果不慎使得innodb存储引擎的元数据文件ibdata损坏,我们还可以挽救宝贵的数据.因为在innodb使用独立表空间的情况下,ibdata文件会记录每个innodb表的i ...

最新文章

  1. 卡波姆对皮肤的作用副作用_卡波姆在化妆品中的作用
  2. android webview加载不出来,android 中用webview 显示本地html,为什么里面的内容显示不出来?...
  3. Mysql8 InnoDB Cluster Shell Router HA配置图解
  4. 将fork出来的分支与原项目合并
  5. Android STL PORT
  6. 【深度学习框架】Tensorflow Session.run()函数的进一步理解
  7. mongodb,Mysql,redis基础教程
  8. Java实现IP代理
  9. 分布式任务调度组件 Uncode-Schedule
  10. 存储容量扩展的设计仿真实验
  11. 【数据分析实战】杭州2019年链家在售房源数据分析
  12. 爬取飞卢小说网的小说
  13. 自建网络加速服务器,自建DNS缓存服务器加快上网速度
  14. matplotlib 设置坐标轴位置(spines),设置坐标别名(xticks,yticks)
  15. App加密那点事浅探爱加密原理
  16. 市场调研报告-全球与中国AI加速器的渗透和路线市场现状及未来发展趋势
  17. 【UE4】Object has overlapping UVs不借助外部软件就能解决的方法
  18. 普通最小二乘法( Ordinary Least Square,OLS)
  19. flexsim软件连接c语言,Flexsim软件的基本操作
  20. Verilog语法总结

热门文章

  1. What the f*ck Python!
  2. 资源变现小程序添加折扣充值和折扣影票插件
  3. Android Studio插入图片
  4. python wilcoxon test_自动化框架之 python+selenium+pytest · TesterHome
  5. 《精进:如何成为一个很厉害的人》 采铜
  6. macOS 上都有哪些既免费、又实用的工具?| 新手问号
  7. E_Groundhog Chasing Death(不错的数论)
  8. 获取空气质量站点数据 城市数据 日数据 时数据
  9. Vue:成功解决[Vue warn]: Failed to resolve directive: modle (found in Anonymous)
  10. hbase snappy 安装_hbase 支持snappy压缩 | 墨荷琼林官网-连载教程