2013-02-13 149 views
0

我在看「啞」解決N後問題,我通過一個while循環中的代碼混淆:while循環做了什麼?

bool check(int b[8][8]) 
{ 

    for(int c = 7; c >= 0; c--) 
    { 
    int r = 0; 
    while(b[r][c] != 1) //this is the while loop I was talking about 
    { 
    r++; 
    } //end while loop 

    for(int i = 1; i <= c; i++) 
    { 
    if(b[r][c-i] == 1) 
     return false; 
    else if ((r-i)>=0 && b[r-i][c-i] == 1) 

     return false; 
    else if ((r+i)<=7 && b[r+i][c-i] == 1) 
     return false; 
    } 

    } 
return true; 
} 

在INT主()我for循環有8在最內層的循環中,我將板的整個第一行初始化爲1.然後我調用該函數,在調用該函數後,我將整個第一行重置爲零。如果你們需要它,我可以顯示int main。

+0

對於由外循環for''控制的每一列'c','while'遍歷數組''b''的第r列看一行,其中'b [r] [c]'是不是1.如果列的每一行都有1,它將訪問內存越界。還有什麼可說的?這是騎士之旅還是八皇后問題,還是跳棋? – 2013-02-13 01:17:14

+2

找到誰命名這些變量併爲我打耳光,努力。 – Aesthete 2013-02-13 01:20:54

+0

八皇后。因此,由於程序已經將整個第一行初始化爲1,因此我們從最右邊開始,這個while循環基本上從b [0] [7]跳到b [1] [7]。 – Chase 2013-02-13 01:21:08

回答

3

如果你縮進你的代碼,它會有所幫助。

while -loop在for -loop內。它正在掃描當前列(c)中的行(r),直到它找到一個正方形(b[r][c]),其中值不是1(無論這意味着什麼,也許意味着它是空的正方形)。

您無法閱讀的事實強調了明智命名的標識符的重要性,並且不在代碼中使用「幻數」。

推薦閱讀:The Practice of Programming (Professional Computing) by Brian W. Kernighan and Rob Pike

+3

所有的良好實踐技能+1 ... – IAbstract 2013-02-13 01:22:11

1

for遞減c。值c正在索引數組元素。 While-loop正在迭代2維數組中的頭元素。只要[r][c]的數組元素不等於1,您將繼續檢查。在r上我看不到任何邊界檢查。

+0

+1提到邊界檢查。 – Johnsyweb 2013-02-13 02:06:05