linux 下清除缓冲区

如何清空输入缓冲区的内容
        C标准规定 fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。
但是有些编译器也定义了 fflush( stdin )的实现,比如微软的VC。其它编译器是否也定义了 fflush( stdin )的实现应当查找它的手册。GCC编译器没有定义它的实现,所以不能使用 fflush( stdin )来刷新输入缓存。

对于没有定义 fflush( stdin )的编译器,可以使用 fgets()函数来代替它(比用 getchar()、scanf()等函数通用性好)。比如楼主提供的第一个程序中可以这样忽略输入流中留下的回车等其它输入,从而使下一次的输入总保持一个“干净”的状态。

[code]// ...

char sbuf[1024];// ...

// fflush(stdin); // 用下面一句代替

fgets( sbuf, 1024, stdin );// ...

在Linux程序设计的时候需要清空标准输入缓冲区,于是使用了如下Windows程序设计中的方法:
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://www.itqun.net/content-detail/72320.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值