2014-12-08 85 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循環檢查。