Linux下清空缓冲区的方法

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);转载自:http://m.blog.csdn.net/blog/yanbober/8720542
时间: 2024-10-22 23:13:04

Linux下清空缓冲区的方法的相关文章

在Linux下禁用IPv6的方法小结

在Linux下禁用IPv6的方法小结--http://www.jb51.net/LINUXjishu/335724.html 这篇文章主要介绍了在Linux下禁用IPv6的方法小结,禁用IPv6的操作还是考虑到目前和IPv4的兼容性问题,需要的朋友可以参考下 Pv6被认为是IPv4——互联网上的传统32位地址空间——的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题.然而,由于已经有大量主机.设备用IPv4连接到了互联网上,所以想在一夜之间将它们全部切换到IPv6几乎是不可能的.许多IPv

linux下shell脚本执行方法及exec和source命令

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

linux下的ImageMagick安装方法

 linux下的ImageMagick安装方法  由于没有图形化界面的支持,在Linux(CentOS 6.4 x64)上的配置相对Windows XP还是麻烦了一点.   1.下载ImageMagick和JMagick的源文件(http://downloads.jmagick.org/6.4.0/):ImageMagick-6.4.0.-0tar.gz   2.解压并安装ImageMagick: # tar xzvf ImageMagick-6.4.0-0.tar.gz # cd ImageM

ORACLE 11G在Linux下的标准安装方法(下)

一.相关文件夹 ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录.ORACLE_BASE下是admin和product. ORACLE_HOME下则是ORACLE的命令.连接库.安装助手.l监听等等一系列的东西.ORACLE_HOME比ORACLE_BASE目录要更深一些.也就是说:ORACLE_HOME=$ORACLE_BASE/product/oracle_version. RACLE_SID这个环境变量全称"Oracle System Ident

Linux下go1.8安装方法

之前迷上了神奇的Go语言,就在windows上装上了Go1.8,挺顺风顺水的,不过最近换上了Linux时,编译安装就炸了,各种报错.今天就留个记录,备个份! 编译安装Go1.8的主体思路: 从github中clone下来 确保linux系统安装较新的libc,gcc(apt,yum随便搞上) 切换库分支至1.4(刚clone下来的库),去到src目录,执行all.bash 把编译安装完的1.4目录cp到/root/,并更名为go1.4 将刚刚的编译安装的仓库恢复原状(git clean -dfx

Linux下 PHP 安装pecl_http方法

Linux下自带的PHP不支持HTTP库,需要自己安装 pecl_http组件安装步骤如下: 1. 组件安装 1.1 安装php-devel开发组件          yum install php-devel 1.2 安装php-pecl组件          yum install php-pecl-memcache 1.3 安装pecl_http的扩展包          pecl install pecl_http 命令pecl install pecl_http的安装过程中可能会出现如

Linux下 环境变量设置方法

etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量. ~/.profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.

Linux下压缩/解压方法大全

linux下压缩包格式繁多,并且在命令行下没有Windows下使用那么方便,有时候解压文件的时候会突然忘掉命令,这里fcbu.com为大家收集了基本所有文件格式的解压方法和打包命令.需要的可以参考一下: .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar只是打包,没有经过压缩的!) --------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz

linux下单独配置subversion方法

linux下单独(不附带apache)配置subversion方法: 安装过程: 1.软件下载.我下载的是 subversion-1.6.5.tar.gz 和 subversion-deps-1.6.5.tar.gz ,前者是 svn1.6.5 的源文件,后者是编译时可能需要用到的包.软件下载地址如下 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260&expandFolder=74 2.解压两个文件进入同