Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1121538
  • 博文数量: 82
  • 博客积分: 3362
  • 博客等级: 中校
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-05 16:27
文章分类

全部博文(82)

文章存档

2011年(1)

2010年(19)

2009年(62)

我的朋友

分类: C/C++

2009-12-20 12:09:42

http://blog.csdn.net/wesleyluo/archive/2009/11/17/4823858.aspx


今天在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);

以上跟大家分享,如有更好的方法请指出,谢谢。

阅读(396) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~