求助:关于输入非法字符后cin的问题
#include<iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////
int main()
{
int *p1=NULL;//声明动态数组1
int *p2=NULL;//声明动态数组2
int length1=0,length2=0;//已使用的数组空间
int sizeOfArray1=0,sizeOfArray2=0;//数组总空间
////////////////////////////////////////////////////////////////////////////////////////////////////////////
if((p1=(int *)malloc(10*(sizeof(int))))==NULL)//为动态数组1分配空间,分配不成功,输出error
{
cout<<"error"<<endl;
exit(0);
}
else
{
sizeOfArray1=10;
}
if((p2=(int *)malloc(10*(sizeof(int))))==NULL)//为动态数组2分配空间,分配不成功,输出error
{
cout<<"error"<<endl;
exit(0);
}
else
{
sizeOfArray2=10;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
while(cin>>*(p1+(length1++)))//输入动态数组1
{
if(length1>=sizeOfArray1)//如果当前空间使用完了,在重新分配空间
{
if((p1=(int *)realloc(p1,(sizeOfArray1+10)*sizeof(int)))==NULL)
{
cout<<"error2"<<endl;
exit(0);
}
else
{
sizeOfArray1+=10;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
///下面出错了,为什么输不进去数组2 ,而是直接跳过数组2,数组1正确
//cout<<endl;//清空缓冲区 这个不行
// while(getchar()!='\n'); 这个也不行,都是直接跳过p2
//fflush(stdin);这个也一样
while(cin>>*(p2+(length2++)))//输入动态数组2
{
if(length2>=sizeOfArray2)//如果当前空间使用完了,在重新分配空间
{
if((p2=(int *)realloc(p2,(sizeOfArray2+10)*sizeof(int)))==NULL)
{
cout<<"error2"<<endl;
exit(0);
}
else
{
sizeOfArray2+=10;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
for(int i=0;i<length1-1;i++)//输出动态数组的各个元素
{
cout<<*(p1+i)<<",";
}
cout<<endl;
for(i=0;i<length2-1;i++)//输出动态数组的各个元素
{
cout<<*(p2+i)<<",";
}
return 0;
}