Linux下清空缓冲区的方法
2017-12-03 15:34
316 查看
原文链接已经失效..... Linux下清空缓冲区的方法 C标准规定fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了fflush( stdin )的实现,比如微软的VC。其它编译器是否也定义了fflush( stdin )的实现应当查找它的手册。 GCC编译器没有定义它的实现,所以不能使用fflush(stdin)来刷新输入缓存。对于没有定义fflush(stdin)的编译器,可以使用fgets()函数来代替它(比用getchar()、scanf()等函数通用性好)。 其中scanf的结束标志为回车或空格或TAB,而gets的结束只能是回车换行。 在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);
相关文章推荐
- Linux下清空键盘缓冲区的一种好方法!
- Linux系统编程_4_标准I/O(附:清空缓冲区方法)
- Linux下清空缓冲区的方法
- Linux下清空缓冲区的方法
- LINUX中清空输入缓冲区最简便的方法!
- Linux 下清空或删除大文件内容的 5 种方法
- Linux 下清空或删除大文件内容的5中方法
- Linux下清空文件内容的几种方法
- C语言中如何清空键盘缓冲区,Linux和Windows下完美实现
- linux几种快速清空文件内容的方法
- Linux下如何清空socket的接收缓冲区的数据
- C语言清空输入缓冲区的N种方法对比【转】
- Linux下清空用户登录记录和命令历史的方法分享
- C 清空输入缓冲区,以及fflush(stdin)的使用误区和解决方法
- C语言清空输入缓冲区的N种方法对比
- 【转】Linux下快速清空文件内容的三种方法
- C语言清空输入缓冲区的N种方法对比
- C语言清空输入缓冲区的N种方法对比
- linux在线清空日志方法
- C语言清空输入缓冲区的N种方法对比