-8

我正在用 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 语句。

4

3 回答 3

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

我不知道您的代码的任何部分实际上做了什么或检查了什么,但这会将 c 重置为 1 每次通过满足前两个条件并因此导致无限循环。

于 2013-08-08T19:39:41.003 回答
1

我不认为你的函数会进入无限循环。

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

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

于 2013-08-08T19:21:33.543 回答
0

在我看来,@Bart 在这里是正确的。您有修改相同变量的嵌套循环。这通常是出现问题的迹象。尝试重命名您的内部循环rc变量。

于 2013-08-08T19:07:50.217 回答