嵌套循环行为怪异

Nested loop acting weird

编辑:发布所有内容,因为它真的很奇怪。

using namespace std;

int main()
{
int doors = -1;
int jumper = 1;
bool isOpen[100];
string tf;

for(int i = 0 ; i < 100; i++){
    isOpen[i] = false;
}

while(jumper < 100){
    while(doors < 100){
        if(isOpen[doors + jumper] == true){
            isOpen[doors + jumper] = false;
        }
        else{
            isOpen[doors + jumper] = true;
        }
        doors += jumper;
        cout << doors << endl;
    }
    doors = -1;
    jumper+=1;
}

for(int i = 0; i < 100; i++){
    if(isOpen[i]){
        tf = "open";
    }
    else{
        tf = "closed.";
    }
    cout << "Door " << i << " is " << tf << endl;
}

return 0;

}

所以我在这段代码中遇到了一个非常奇怪的问题。 它应该经过 100 个项目的数组。 0 - 99 一个,然后拖,然后三,等等。但是,在 a = 10 之后,它会上升到 266。 谁能告诉我为什么?

编辑: 只有在 for 循环被注释掉时才会出现此问题。当它留在代码中时,它会做同样的事情,但直到 19 才会发生。 如果我也注释掉 "string tf;",它会继续在 99 处循环。 这都是基于门数。 我不确定为什么这些中的任何一个都应该成为循环的一个因素,但两者都没有连接到。

根据您的描述,您应该这样做:

for(int adv = 1, i = 0; adv < 100;)
{
   // i is array index (your b) -> use it somehow:
   doSomething(arr[i]);

   i += adv;
   if(i >= 100)
   {
       i = 0;
       adv++;
   }
}

您出现奇怪行为(包括 266 值)的(可能)原因是您的代码超出了缓冲区。当 b 足够高时(例如 99),您将写入 isOpen[b + a] ,它将是 100 或更高(如果 a 为 1,则为 100,这只是第一次迭代,稍后迭代将走得更远)。如果编译器在整数之前分配 isOpen,你将覆盖它们。