C ++ While循环意外结束

时间:2017-01-19 03:47:06

标签: c++ while-loop

我有一个while循环,它在我的c ++程序中的第二个线程中独立运行,但是循环结束时没有满足我设置的条件。

我尝试设置一个计数器来跟踪循环运行的次数,每次都不同,从8到数百次不等。

有谁知道为什么会发生这种情况?

while (ghostPosition.X != playerPosition.X && ghostPosition.Y != playerPosition.Y)
{
    randomDirection = getRandomNumber(1, 5);

    x = ghostPosition.X;
    y = ghostPosition.Y;

    if (randomDirection == 1)
    {
        if (ghostPosition.X > 1)
        {
            COORD oldPosition = { x, y };
            COORD moveTo = { --x, y };
            updateGraphics(oldPosition, moveTo, ghost);
            ghostPosition.X = ghostPosition.X--;
        }
    }
    else if (randomDirection == 2)
    {
        if (ghostPosition.Y < 84)
        {
            COORD oldPosition = { x, y };
            COORD moveTo = { x, ++y };
            updateGraphics(oldPosition, moveTo, ghost);
            ghostPosition.Y = ghostPosition.Y++;
        }
    }
    else if (randomDirection == 3)
    {
        if (ghostPosition.X < 24)
        {
            COORD oldPosition = { x, y };
            COORD moveTo = { ++x, y };
            updateGraphics(oldPosition, moveTo, ghost);
            ghostPosition.X = ghostPosition.X++;
        }
    }
    else if (randomDirection == 4)
    {
        if (ghostPosition.Y > 1)
        {
            COORD oldPosition = { x, y };
            COORD moveTo = { x, --y };
            updateGraphics(oldPosition, moveTo, ghost);
            ghostPosition.Y = ghostPosition.Y--;
        }
    }
}

内部循环调用的函数:

int Maze::getRandomNumber(int minimum, int maximum)
{
    int output;
    std::random_device randomDevice;
    std::mt19937 mersenneTwister(randomDevice());
    std::uniform_real_distribution<double> distribution(minimum, maximum);

    return distribution(mersenneTwister);
}

另一个名为(updateGraphics)的函数只是根据传递的参数修改控制台的输出。 (我认为这个功能不是问题)

2 个答案:

答案 0 :(得分:2)

我认为你希望这个循环在玩家和鬼位置不同时执行。但这并不是你所定义的条件。当玩家和幽灵X位置不同且玩家和幽灵Y位置不同时,你的循环执行。如果两者相同,则循环将停止。我想你想要OR。

答案 1 :(得分:0)

没有一些调试信息很难说。为什么不在while循环结束前打印ghostPosition和playerPosition的内容并将其发回。

另外,冒着迂腐的风险,你可以通过使用swtich语句而不是大量的if / else语句简单地使用循环逻辑。