为什么这个循环无限?

时间:2013-08-08 19:04:48

标签: c++

我正在用c ++创建一种扫雷程序,在运行一些测试之后,我发现由于某种原因我看不到,我的一个for循环永远不会结束。我已经看了很长时间的代码了,看不出原因。非常感谢你帮助我,我对c ++有些新意,我非常困惑。

以下是代码:

for (int r = 0; r <= 8; r++)
{
    for (int c = 0; c <= 8; c++)
    {
        int num = 0;
        if (realmap[r][c] != 10)
        {
            if (r - 1 != -1 && realmap[r - 1][c] == 10)
            {
                num++;
            }
            if (r - 1 != -1 && c + 1 != 9 && realmap[r - 1][c + 1] == 10)
            {
                num++;
            }
            if (c + 1 != 9 && realmap[r][c + 1] == 10)
            {
                num++;
            }
            if (r + 1 != 9 && c + 1 != 9 && realmap[r + 1][c = 1] == 10)
            {
                num++;
            }
            if (r + 1 != 9 && realmap[r + 1][c] == 10)
            {
                num++;
            }
            if (r + 1 != 9 && c - 1 != -1 && realmap[r + 1][c - 1] == 10)
            {
                num++;
            }
            if (c - 1 != -1 && realmap[r][c - 1] == 10)
            {
                num++;
            }
            if (r - 1 != -1 && c - 1 != -1 && realmap[r - 1][c] == 10)
            {
                num++;
            }
            realmap[r][c] = num;
            Sleep(5000);
            cout << "test3";
        }
    }
}

如果您发现问题,非常感谢。如果没有人能找到问题,我将包括其余的if语句。

3 个答案:

答案 0 :(得分:2)

if(r+1 != 9 && c+1 != 9 && realmap[r+1][c=1] ==10

我不知道你的代码的任何部分实际上是做什么或检查的,但是这会在满足前两个条件的每一遍中将c重置为1,从而导致无限循环。

答案 1 :(得分:1)

我不认为你的功能会进入无限循环。

原因是这些循环迭代器具有不同的范围,并且在C ++中完全有效。

但是您的代码每次遇到时都会sleep(5000)等待 5000秒。 删除sleep并尝试运行代码。

答案 2 :(得分:0)

我认为@Bart在这里是正确的轨道。您有嵌套循环正在修改相同的变量。这通常表明出现了问题。尝试重命名内循环rc变量。