2014-12-08 58 views
-2

因此,通过这一点代码,程序挂起并不会退出循环,printfs只是用于调试,它们不是程序的组成部分。我对编程相当陌生,所以我不确定我错过了什么逻辑似乎应该起作用。非常感谢您花时间查看本文和您的帮助。卡住嵌套do {for {if循环

do 
{ 
    intialcollide = 0; 
    for(i=0; i<11; i++) 
    { 
     if(i != currentObj) 
     { 
      if(object[currentObj].new_loctX == object[i].new_loctX && object[currentObj].new_loctY == object[i].new_loctY) 
      { 
       intialcollide = 1; 
      } 
      else 
      { 
       intialcollide = 0; 
      } 
     } 
     printf("%d\n", intialcollide); 
    } 
}while(intialcollide != 1 || i != 10); 
printf("Collide? %d", intialcollide); 

当我运行它时,我得到无限的1和0。再次感谢您的帮助

+2

我不完全明白你在做什么,但也许问题是'while(intialcollide!= 1 || i!= 10);',好像'i!= 10'永远是真的。 – rendon 2014-12-08 02:19:46

+2

使用调试器来遍历您的代码 – 2014-12-08 02:19:52

+0

“所以我不知道我错过了什么” - 睡眠?咖啡? “逻辑似乎应该起作用” - 而不是任何真正看过它的人。 – 2014-12-08 02:41:36

回答

2

在您的for循环结束时,i将始终等于。也许你认为它会等于10?无论如何,将i与条件中的任何内容进行比较没有意义,因为您知道它始终是相同的值。

+0

它是我的理解,我将初始等于0,然后每次重复for循环命令时递增。一旦i = 10,for循环中的条件语句不再为真,我不会再小于10,并退出for循环。这段代码的思想是,我检查一个对象的位置与其他10个对象的位置是否等于intialcollide函数需要等于1的其他对象之一,do while循环在那里,以便如果它与对象碰撞intialcollide不会被对象2,3,4覆盖... – AKNorth 2014-12-08 02:34:37

+0

“它是我的理解” - 你没有来这里寻求帮助吗? *你完全被告知*发生了什么事。尝试阅读并理解这个答案......你的状况是“我<11”,而不是“我<10”。正如答案所说,在do循环结束时比较'i'没有意义...它的值是已知的。但是......阅读softwarenewbie7331的答案......这很重要。 – 2014-12-08 02:44:58

+0

补充说明,并澄清你的误解,“一旦我= 10 ...不再是真的”是假的,因为你的情况是我<11。当它完成for循环时,我将是11。 do while循环不会阻止覆盖,while条件只在do while循环结束时检查ONCE,而不是在for循环执行期间检查。如果您的代码将具有所需的行为,您将需要向for循环添加一个断点。 – softwarenewbie7331 2014-12-08 03:09:17

2

添加“break”每当将intialcollide设置为1.您的for循环将在将值设置为0之前将其重置为0,然后再进入while循环检查。