2013-02-13 145 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