fflush(stdin)和fflush(stdout)

转载 2015年11月19日 17:41:22
 fflush(stdin)比较容易理解,即清理标准输入流,把多余的仍未被保存的数据丢掉。

比如,下面这个小程序:

void main()

{

        int a;

        char str[10];

        cin>>a;

        cout<<a<<endl;

        cin>>str;

        cout<<str<<endl;

}

目地很简单:从stdin获得一个整数存入a,接着立马打印出来;从stdin获得一个字符串存入str,也立马打印出来。但是下面这种可能需要特别考虑:在首行输入了两个整数,在cin>>a之后,stdin缓冲还有一个整数没被读取。接下来,不等输入字符串,就直接把上面多出来的数字存入到str中去并打印。

某种程度上这是操作不规范造成的,但是程序应该要有健壮性,程序员应该提前预防这种不规范的操作。可以在程序界面上提示“请输入1个整数”,甚至有时候不厌其烦的强调和警告也必要。当然,本例为求简单,并不在UI友好方面做文章。这时,可以在cin>>str语句前插入fflush(stdin),如此一来就可以清空标准输入缓冲里多余的数据。

fflush(stdout)跟fflush(stdin)类似,是对标准输出流的清理,但是它并不是把数据丢掉,而是及时地打印数据到屏幕上。为了更好的理解它,需要知道一个事实:标准输出是以『行』为单位进行的,也即碰到\n才打印数据到屏幕。这就可能造成延时,如下面这几行代码:

int a;

printf_s("input one number:");

fflush(stdout);\\#1

scanf_s("%d",&a);

如果没有#1那行代码,在某些平台上就可能迟迟看不到"input one number"被打印到屏幕上来,因为它没有回车。这时候,fflush(stdout)就起到及时输出的作用。

但是在Windows平台上,似乎并看不出差别来。也即MSFT已经将stdout的输出改成及时生效了。

fflush函数被广泛使用在多线程、网络编程的消息处理中。

fflush(stdout):清空输出缓冲区,并把缓冲区内容输出

fflush(stdin)和fflush(stdout)

fflush(stdin)比较容易理解,即清理标准输入流,把多余的仍未被保存的数据丢掉。 比如,下面这个小程序: void main() {         int a;         c...

对付printf之后没有fflush(stdout)的程序

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可。允许非商业转载,但应注明作者及出处。 作者:xialulee 最初发布于:2011年1月28日,h...

关于fflush(stdin)清空输入缓存流(C/C++) 新手必看!!

1. 为什么 fflush(stdin) 是错的? 首先请看以下程序: #include int main( void ) { int i; for (;;)    {   ...

关于fflush(stdin)清空输入缓存流~VC6与gcc的区别~

1. 为什么 fflush(stdin) 是错的?首先请看以下程序: #include int main( void ){int i; for (;;) { fputs("Please ...

C 清空输入缓冲区,以及fflush(stdin)的使用误区和解决方法

对C 语言初学者来说,fflush(stdin)函数被解释为会清空输入缓冲区的一个系统函数,这是一个曾经几乎对过一半的说法,随着计算机科学的进步,在学习的过程中的逐步完善,将fflush(stdin)...

C语言(11)--回文日、确定等式、fflush(stdin)、将十进制数转换成n进制数、二分法解方程

1、回文日、 2、确定等式 3、fflush(stdin) 4、将十进制数转换成n进制数 5、二分法解方程 当年份确定后,如2015年,就看20155102能否构成一个合法的日期,其中51部分是...
  • Ramay7
  • Ramay7
  • 2015年09月09日 19:10
  • 590

关于fflush(stdin)清空输入缓存流(C/C++)

作者:蚂蚁的 C/C++ 标准编程1.       为什么 fflush(stdin) 是错的首先请看以下程序:                   #include int main( void )...

fflush(stdin) 清除Scanf输入缓冲区

scanf循环输入带来的问题:#include #includeint main(int argc, char* argv[]) { int ival; float fval; ...

关于fflush(stdin)的误区

1.       为什么 fflush(stdin) 是错的 首先请看以下程序:               #include   int main( void ) {     int...

C/C++语言误区之:fflush(stdin)

1.为什么fflush(stdin) 是错的 首先请看以下程序: #include int main( void ) {     int i=1;     while(i)     ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fflush(stdin)和fflush(stdout)
举报原因:
原因补充:

(最多只允许输入30个字)