c++ - 执行后计数器for循环错误地递增

标签 c++ loops for-loop while-loop nested-loops

我有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,这在我的程序后面给了我一个错误,或者更糟糕的是超出范围的访问。

提前致谢

最佳答案

这就是for循环的工作方式。在检查条件之前完成增量。

进行所需操作的正确方法(易于阅读,易于维护)是在循环外部添加变量。

int index;

并在找到元素时进行设置:
        found = ...
        if (found) index = i;

关于c++ - 执行后计数器for循环错误地递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326194/

相关文章:

c++ - 使用可重写的处理函数构建类层次结构

c++ - 将 unicode 替换为 C++ 字符串中的空格时出现段错误

c - 使用时间为 C 中的随机化器播种循环

JavaScript : Iterate pushed elements in a same loop

javascript - 在 JavaScript 中构建基本计算器 - 第一次工作但在循环中我收到 "___ is not a function"错误

javascript - *javascript* 将所有 for 循环值提取为不同的变量

c++ - 一个简单的 cout 语句打印,一个变量打印,一个 for 循环不会打印

c++ - 使用 QT5_ADD_RESOURCES 和使用 CMake 进行多线程编译时损坏的资源 .cpp 文件

c++ - setcontext 和 makecontext 调用通用函数指针

JavaScript 变量作用域