嵌套循环表现得很奇怪

时间:2015-08-06 06:22:22

标签: c++ loops nested int

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

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个项目的数组。然后,在a = 10之后,它会发射到266。 谁能告诉我为什么?

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

1 个答案:

答案 0 :(得分:0)

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

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,那么你将覆盖它们。