缓冲区清空问题
如下代码
#include <stdio.h>
#include <iostream.h>
void main(){
int i,j,k;
int a[4];
for(i=0;i <4;i++)
cin> > a[i];
cout < < "输入j,k " < <endl;
cin> > j;
cin> > k;
cout < < "j= " < <j < < " k= " < <k < <endl;;
}
如果我输入:1 2 3 4 5 6 中间用空格隔开,回车,j,k就已经自动赋值为5,6,但是我想在输出 "输入j,k "后再输入j,k的值,也就是在给数组赋完值后,清空一下后面多余的内容.请问如何做,听说有个函数fflush可以,但试了多次也不管用,希望高手指点一下.
[解决办法]
刚测试了下,C中用这样的方法是可以的,不晓得C++中这个cin> > 输入流是怎么处理的。。。
代码如下:
#include <stdio.h>
void main(){
int i,j,k;
int a[4];
for (i=0; i <4; i++)
scanf( "%d ", &a[i]);
fflush(stdin);
printf( "输入j,k\n ");
scanf( "%d ", &j);
scanf( "%d ", &k);
printf( "j=%d k=%d\n ", j, k);
}
[解决办法]
fflush函数在c++中是未定义的
#include <stdio.h>
#include <iostream.h>
void main()
{
int i,j,k;
int a[4];
j = k = 0;
for(i=0;i <4;i++)
cin> > a[i];
cin.sync(); // 清空
cout < < "输入j,k " < <endl;
cin> > j;
cin> > k;
cout < < "j= " < <j < < " k= " < <k < <endl;;
}
[解决办法]
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main( void )
{
int i,j,k;
int a[4];
for(i=0;i <4;i++)
cin> > a[i];
char tmp; //辅助空间
cin.get(tmp); //读取内容
while(tmp!= '\n ')cin.get(tmp); //判断,循环读取所有的剩余内容
cin.clear(); //清除一下cin标记,不clear问题也不大
cout < < "输入j,k " < <endl; //OK
cin> > j;
cin> > k;
cout < < "j= " < <j < < " k= " < <k < <endl;
return 0;
}