Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果是条件,则不';t代码正确执行代码_C++_Mfc - Fatal编程技术网

C++ 如果是条件,则不';t代码正确执行代码

C++ 如果是条件,则不';t代码正确执行代码,c++,mfc,C++,Mfc,此代码从对话框中获取字符串,并将其与列表中的数据进行比较,如果成功,则在列表中的元素上设置选择。 我遇到的问题是if,如果我只搜索第一个元素,它就会工作,如果我尝试搜索任何其他元素,它就会忽略if条件,一直到列表的末尾 void CMFC1Dlg::OnBnClickedButton6() { CString variable; cautare.GetWindowTextA(variable); variable = variable.MakeLower();

此代码从对话框中获取字符串,并将其与列表中的数据进行比较,如果成功,则在列表中的元素上设置选择。 我遇到的问题是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("");
}
void CMFC1Dlg::OnBnClickedButton6()
{ 
CString变量;
cautare.GetWindowTextA(变量);
variable=variable.MakeLower();
如果(变量!=“”)
{
列表::迭代器搜索;
布尔标志=真;
int i=0;
while(旗帜)
{
seek=议程。第一个元素();
if(((CString)(*seek)->getLastName().c_str()).MakeLower()==变量||
((CString)((*seek)->getFirstName().c_str()).MakeLower()==变量||
((CString)((*seek)->getFirstAndLastName().c_str()).MakeLower()==变量||
((CString)((*seek)->getLastAndFirstName().c_str()).MakeLower()==变量)
{
联系人可变。设置光标(i);
此->OnLbnSelchangeList1();
flag=FALSE;
}
前进(寻求,我);
i++;
if(i==agenda.list_size())
{
flag=FALSE;
}
}
}
其他的
消息框(“输入时无文本”,“错误”,MB|U ICONROR | MB|U OK);
尾骨集焦();
Cautar.SetWindowTextA(“”);
}

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

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


EDIT:您还需要将seek调用更改为仅seek 1,而不是i,因为您不再抛出上一次搜索的结果。

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

代码可能是这样的

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

您只能比较第一个元素移动
前进(seek,i)如下所示:

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

不,每次我都需要将seek设置为第一个元素,这样当我前进时,我就可以到达列表中的“i”元素。如果他这样做,那么前进方法将导致非常奇怪的行为。@Karudi:
advance(seek,i);i++
应该在
if()前面。