【问题标题】:Why is this for loop infinite?为什么这个for循环是无限的?
【发布时间】:2013-08-08 19:04:48
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过使用调试器,例如 MVS?
  • 为什么有嵌套循环修改 r 和 c 两次?
  • 巴特似乎在正确的轨道上。您将变量“r”和“c”重新初始化为零,这将阻止外部循环完成。
  • 那些有不同的范围应该不是问题。
  • 你用什么编译?那些for循环语句有重新声明,应该是非法的。

标签: c++


【解决方案1】:
if(r+1 != 9 && c+1 != 9 && realmap[r+1][c=1] ==10

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 睡眠以毫秒为单位
    【解决方案3】:

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

    【讨论】:

    • 嵌套循环正在修改具有相同名称的不同变量。嗯,他们是,但现在代码又被修改了,嵌套循环不见了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2018-01-13
    相关资源
    最近更新 更多