fflush(stdin) & fflush(stdout)
1.fflush(stdin)
- 清理标准输入流,把多余的仍未被保存的数据丢掉。
e.g.
int a;
char str[10];
cin>>a;
cout<<a<<endl;
cin>>str;
cout<<str<<endl;
程序的本意是从stdin获得一个整数存入a,接着立马打印出来;从stdin获得一个字符串存入str,也立马打印出来。
但是,在输入时如果输入了两个整数,在cin>>a之后,stdin缓冲还有一个整数没被读取。接下来,不等输入字符串,程序就直接把上面多出来的数字存入到str中去并打印。并不会输出字符串str,而是输出开始输入的第二个整数
此时可以在cin>>str;
前插入fflush(stdin);
即可解决问题。
即:
int a;
char str[10];
cin>>a;
cout<<a<<endl;
fflush(stdin); // Notice!
cin>>str;
cout<<str<<endl;
2.fflush(stdout)
- 清空输出缓冲区,并把缓冲区内容输出。
- 并不是把数据丢掉,而是及时地打印数据到屏幕上。
标准输出是以『行』为单位进行的,也即碰到\n才打印数据到屏幕。这就可能造成延时,如下面这几行代码:
int a;
printf_s("input one number:");
fflush(stdout); // #1
scanf_s("%d",&a);
如果没有#1,在某些平台上就可能迟迟看不到
"input one number"
被打印到屏幕上来,因为它没有回车。这时候,fflush(stdout)
就起到及时输出的作用。