首页 > 解决方案 > for循环中的计数器在执行后错误地递增

问题描述

我有 3 个嵌套循环,其中代码无论如何都不会修改计数器,我需要最顶层循环计数器的值以便稍后在代码中使用。看起来像这样

int i;
for( i = 0; !found && i <f_i.size();i++){
    for(unsigned int j = 0; !found && j < f_g.size();j++){
        for(unsigned int k = 0; !found && k < f_g.size();k++){
            ///Do Stuff
            found = (/*Condition that's fulfilled after 2 iterations on k*/);
        }
    }
}

//Stuff that uses i

在最内层循环的 2 次迭代后满足条件,因此i此时值为 0。使用 GDB,我看到在最顶层循环中检查条件后 i 的值跳到 1,这在我的程序后面给了我一个错误,或者更糟的是越界访问。

提前致谢

标签: c++loopsfor-loopwhile-loopnested-loops

解决方案


由于 for 循环的第三个表达式,变量 i 递增

int i;
for( i = 0; !found && i <f_i.size();i++){
                                    ^^^^  
    for(unsigned int j = 0; !found && j < f_g.size();j++){
        for(unsigned int k = 0; !found && k < f_g.size();k++){
            ///Do Stuff
            found = (/*Condition that's fulfilled after 2 iterations on k*/);
        }
    }
}

为避免这种情况,您可以编写例如

int i;
for( i = 0; !found && i <f_i.size();){
    for(unsigned int j = 0; !found && j < f_g.size();j++){
        for(unsigned int k = 0; !found && k < f_g.size();k++){
            ///Do Stuff
            found = (/*Condition that's fulfilled after 2 iterations on k*/);
        }

    }
    i += !found;
}

或者代替表达式语句

i += !found;

你可以使用 if 语句

if ( !found ) ++i;

此外,如果变量i将在循环之前初始化,例如像

int i = 0;
while ( !found && i < f_i.size() ){
    for(unsigned int j = 0; !found && j < f_g.size();j++){
        for(unsigned int k = 0; !found && k < f_g.size();k++){
            ///Do Stuff
            found = (/*Condition that's fulfilled after 2 iterations on k*/);
        }

    }
    i += !found;
}

推荐阅读