此代码从对话框中获取一个字符串,并将其与列表中的数据进行比较,如果成功,则设置选择列表中的元素。 我遇到的问题是 if,如果我只搜索第一个元素它会工作,如果我尝试搜索任何其他元素,它只会忽略 if 条件并一直走到列表的末尾。
void CMFC1Dlg::OnBnClickedButton6()
{
CString variable;
cautare.GetWindowTextA(variable);
variable = variable.MakeLower();
if(variable!="")
{
list<Contact*>::iterator seek;
bool flag = TRUE;
int i = 0 ;
while(flag)
{
seek = agenda.first_element();
if( ((CString)((*seek)->getLastName().c_str())).MakeLower() == variable ||
((CString)((*seek)->getFirstName().c_str())).MakeLower() == variable ||
((CString)((*seek)->getFirstAndLastName().c_str())).MakeLower() == variable ||
((CString)((*seek)->getLastAndFirstName().c_str())).MakeLower() == variable)
{
contactsVariable.SetCurSel(i);
this->OnLbnSelchangeList1();
flag=FALSE;
}
advance(seek,i);
i++;
if (i == agenda.list_size())
{
flag = FALSE;
}
}
}
else
MessageBox("No text on input ", "Error", MB_ICONERROR | MB_OK);
cautare.SetFocus();
cautare.SetWindowTextA("");
}
最佳答案
您在 while 循环的每次迭代开始时设置 seek = agenda.first_element();
。将该语句移出循环,它应该可以工作。
编辑:您还需要将搜索调用更改为仅搜索 1,而不是 i,因为您不再丢弃之前搜索的结果。
关于c++ - 如果条件,代码不正确执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061780/