在Linux 中C语言清空标准输入流的一些问题

     在写测试程序过程,遇到了清空标准输入的问题,程序是这样的,测试8个继电器是否正常运行,我利用for()语句将8个继电器一次开闭,执行完后,根据测试情况,即是否成功?通过键盘来输入测试结果,即“Y/N”,但会出现这种情况,当在for()语句循环还未结束时,已经按Y或N键,那么for()结束后,就会直接根据先前的按键输入来判断测试结果,导致结果有误,所以要在for()语句结束后,对标准输入进行清空,在网上查了些资料,如下:

1.fflush(stdin);这个fflush()函数根本不是标准C中的函数,只是标准C的扩展,所以在Linux中使用根本不行;

2.rewind(stdin);这个函数其实是将指针指向流的开始处。但是它是文件操作中的一个函数,操作的是FILE型流,在Windows程序设计中是可以清空标准输入缓冲区的,但是在Linux中不行。

3.通过读完标准缓冲区中的剩余字符并丢弃掉来清空标准缓冲区,使用的函数是getchar(),此函数的作用是从标准输入缓冲区中读出一个字符,此方法中Linux中可行。

如果需要清除stdin可以通过如下循环实现:

char ch;

while((ch=getchar())!='/n'&&ch!=EOF);

以上语句将清除stdin中的字符,知道遇到换行符或者是读完缓冲区。

以上的方法均可以在Windows程序设计中用来清除缓冲区;

4.在Linux程序设计中也还是有一种用来清空stdin中的方法,直接调用如下的函数:

setbuf(stdin, NULL);

此函数我还没有来得及测试;

通过以上分析,在Linux下清空stdin用两种方法:

1.通过读取剩余的字符并丢弃掉;

char ch;

while((ch=getchar())!='/n'&&ch!=EOF);

或者是:

char s[1024];

fgets(s,1024,stdin);

2.使用函数setbuf(stdin,NULL);

 

以上转载自:http://blog.csdn.net/wesleyluo/archive/2009/11/17/4823858.aspx

     以上几种方法我都已经测试过,但效果都不理想,利用getchar()的方法倒还可以,在for结束后放一个getchar,是为了读出在for循环中输入的数据,读出即清空后,再重新输入测试结果,但是在没有误操作情况下,必须按两下按键才可以,这样又麻烦了好多,如果要是能实现:若有误操作,可以利用将其读出,若无误操作,可以在间隔一段时间后自动跳出,即不阻塞!这时我想到了select()函数,嘿嘿,效果还不错哦!大家可以试试!

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值