【问题标题】:Nested loop acting weird嵌套循环表现怪异
【发布时间】:2015-08-06 06:22:22
【问题描述】:

编辑:发布所有内容,因为它变得非常奇怪。

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 岁才会发生。 如果我注释掉“字符串 tf;”同样,它继续在 99 处循环。 这一切都基于门数。 我不确定为什么其中任何一个都应该是两个都没有连接到的循环的一个因素。

【问题讨论】:

  • 定义“芽”。为什么要将 b 初始化为 -1?
  • 您使用什么语言?这闻起来像 C,但话说回来,Jay Gosling 总是闻起来有点像 Bjourne Strousup。
  • @Amit 我的意思是 10 之后的下一个数字是 266。因为我正在遍历数组 arr[a + b]。所以它从 0 开始到 99。我将发布整个代码,因为现在发生了更奇怪的事情。
  • 在即将进行的编辑之前与自己玩猜测:由于缓冲区溢出导致的内存垃圾
  • 我刚刚否决了您的问题,因为您更改了代码,从而大大改变了所有已经完成的工作。

标签: c++ loops nested int


【解决方案1】:

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

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,这只是第一次迭代,以后的迭代会走得更远) .如果编译器在 int 之前分配 isOpen,您将覆盖它们。

【讨论】:

  • 谢谢。我现在完全看到了问题所在。
猜你喜欢
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 2018-01-06
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
相关资源
最近更新 更多