C++ 问题,输入两个Vector数组 遇到的两个问题,请知情人相告,当输入第一个数组的时候 程序结束了。
intmain(){inta,b;vector<int>vec1;vector<int>vec2;cout<<"请输入第一个数组"<<endl;while(cin>>a)...
int main()
{
int a,b;
vector<int>vec1;
vector<int>vec2;
cout<<"请输入第一个数组"<<endl;
while(cin>>a)
{
vec1.push_back(a);
}
cout<<"请输入第二个数组"<<endl;
while(cin>>b)
{
vec2.push_back(b);
}
for(vector<int>::size_type i=0;i!=(vec1.size()>vec2.size()?vec2.size():vec1.size());++i)
{
if(vec1[i]!=vec2[i])
cout<<"谁也不是谁的前缀"<<endl;
getch();
return 0;
}
if(vec1.size()>vec2.size())
{
cout<<"数组2是数组1的前缀"<<endl;
}
if(vec1.size()<vec2.size())
{
cout<<"数组1是数组2的前缀"<<endl;
}
else
{
cout<<"两数组相等 "<<endl;
}
getch();
return 0;
} 展开
{
int a,b;
vector<int>vec1;
vector<int>vec2;
cout<<"请输入第一个数组"<<endl;
while(cin>>a)
{
vec1.push_back(a);
}
cout<<"请输入第二个数组"<<endl;
while(cin>>b)
{
vec2.push_back(b);
}
for(vector<int>::size_type i=0;i!=(vec1.size()>vec2.size()?vec2.size():vec1.size());++i)
{
if(vec1[i]!=vec2[i])
cout<<"谁也不是谁的前缀"<<endl;
getch();
return 0;
}
if(vec1.size()>vec2.size())
{
cout<<"数组2是数组1的前缀"<<endl;
}
if(vec1.size()<vec2.size())
{
cout<<"数组1是数组2的前缀"<<endl;
}
else
{
cout<<"两数组相等 "<<endl;
}
getch();
return 0;
} 展开
展开全部
cin在第一次循环结束后,设置状态为fail,所以下次操作一定失败,导致下次的cin直接返回失败,所以就立刻执行第二个循环之后的代码了
需要在第一个循环之后清除cin的fail状态并从流中读入失败的字符,然后将其忽略,接着在读入新的int
清理状态用cin.clear(); 忽略字符用cin.ignore();
如下代码可以输入第二个数组,但逻辑上没看,不能保证正确
int main()
{
int a,b;
vector<int>vec1;
vector<int>vec2;
cout<<"请输入第一个数组"<<endl;
while(cin>>a)
{
vec1.push_back(a);
}
cin.clear(); //清理状态
cin.ignore(); //忽略最后输入的字符
cout<<"请输入第二个数组"<<endl;
while(cin>>b)
{
vec2.push_back(b);
}
for(vector<int>::size_type i=0;i!=(vec1.size()>vec2.size()?vec2.size():vec1.size());++i)
{
if(vec1[i]!=vec2[i])
cout<<"谁也不是谁的前缀"<<endl;
getch();
return 0;
}
if(vec1.size()>vec2.size())
{
cout<<"数组2是数组1的前缀"<<endl;
}
if(vec1.size()<vec2.size())
{
cout<<"数组1是数组2的前缀"<<endl;
}
else
{
cout<<"两数组相等 "<<endl;
}
getch();
return 0;
}
需要在第一个循环之后清除cin的fail状态并从流中读入失败的字符,然后将其忽略,接着在读入新的int
清理状态用cin.clear(); 忽略字符用cin.ignore();
如下代码可以输入第二个数组,但逻辑上没看,不能保证正确
int main()
{
int a,b;
vector<int>vec1;
vector<int>vec2;
cout<<"请输入第一个数组"<<endl;
while(cin>>a)
{
vec1.push_back(a);
}
cin.clear(); //清理状态
cin.ignore(); //忽略最后输入的字符
cout<<"请输入第二个数组"<<endl;
while(cin>>b)
{
vec2.push_back(b);
}
for(vector<int>::size_type i=0;i!=(vec1.size()>vec2.size()?vec2.size():vec1.size());++i)
{
if(vec1[i]!=vec2[i])
cout<<"谁也不是谁的前缀"<<endl;
getch();
return 0;
}
if(vec1.size()>vec2.size())
{
cout<<"数组2是数组1的前缀"<<endl;
}
if(vec1.size()<vec2.size())
{
cout<<"数组1是数组2的前缀"<<endl;
}
else
{
cout<<"两数组相等 "<<endl;
}
getch();
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询