如果是条件,则不能正确执行代码

时间:2011-05-19 16:27:12

标签: c++ mfc

此代码从对话框中获取一个字符串,并将其与列表中的数据进行比较,如果成功设置了列表中元素的选择。 我遇到的问题是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("");
}

4 个答案:

答案 0 :(得分:4)

您在while循环的每次迭代开始时设置seek = agenda.first_element();。将该语句移到循环之外,它应该可以工作。

编辑:您还需要将搜寻电话更改为仅搜索1而不是i,因为您不再丢弃先前搜索的结果。

答案 1 :(得分:2)

您应该将seek = agenda.first_element();移出while循环。

答案 2 :(得分:2)

由于您正在迭代元素列表,为什么不使用关联列表的begin()end()方法。因此,您可以迭代每个元素,而不需要在每个循环中推进迭代器。

代码看起来像这样

list<Contract*>::iterator seek = agenda.begin();
while (flag && (seek != agenda.end())) {
    // do the comparison
    seek++;
}

答案 3 :(得分:1)

您只是比较第一个元素移动advance(seek,i);,如下所示:

 while(flag)
 {
     seek = agenda.first_element();
     advance(seek,i);
     ...