#include
#include
#include
using namespace std;
bool search(vector
{
while(ite1!=ite2)
{
if(*ite1++==num)//这里要加个++
{
return 1;
}
}
return 0;
}
void main()
{
vector
int n;
int num;
cout<<"输入数据"<
{
vec.push_back(n);
}
cin.clear();//清除错误的输入状态
//getchar();
cin.ignore();//读取并抛弃
cout<<"请输入你要查找的数字"<
if(search(vec.begin(),vec.end(),num))
{
cout<<"找到了"<
else
{
cout<<"没找到你请求的数字"<
}
这里会造成无法输入是因为错误的输入状态和if(*ite1==num)这个造成的,当输入非整形数据时,while循环停止当那个非整形数据依然停留在缓存区,下次输入时便会在缓存区直接读取并不会提示输入所以num就被赋予了一个错误的数值。
要解决这个问题应该把缓存区的非整形数据读取出来并抛弃掉,注意,如果是错误的输入有可能会导至对后面的输入关闭所以先用cin.clear(),来清除错误的输入状态再用getchar(),或cin.ignore();来取出缓冲区的非整形数据,这样就可以正常输入了
进入子函数时if(*ite1==num)ite1永远没变化所以ite1不可能等于ite2死循环就是在这里造成的。所以if(*ite1==num)ite1因改为if(*ite1++==num)ite1。
这个和容器没有关系
因为在循环
while(cin>>n)
{
vec.push_back(n);
}
中,要中止循环,使用了ctrl+z,将cin流置为了错误状态,所以在下一次使用cin时不能进行输入。只要在
cout<<"请输入你要查找的数字"<