C++ 循环意外结束
C++ While loop ending unexpectedly
我有一个 while 循环,它在我的 c++ 程序中的第二个线程中独立运行,但是循环在没有满足我设置的条件的情况下结束。
我尝试设置一个计数器来跟踪循环运行的次数,每次都不同,从八到数百次不等。
有谁知道为什么会发生这种情况?
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) 的另一个函数只是根据传递的参数修改控制台的输出。(我不认为这个功能是问题所在)
我认为您希望在玩家和幽灵位置不同时执行此循环。但这不是您定义的条件。当玩家和幽灵 X 位置不同且玩家和幽灵 Y 位置不同时,您的循环会执行。如果两者相同,则循环将停止。我想你想要OR。
如果没有一些调试信息,很难分辨。你为什么不在 while 循环结束之前打印出 ghostPosition 和 playerPosition 的内容并将它们发回去。
此外,冒着听起来迂腐的风险,您可以通过使用 swtich 语句而不是大量 if/else 语句来简化循环逻辑。
相关文章:
- 为什么在这个代码结束循环中没有得到结束
- 在C++中对T*类型执行std::move的意外行为
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 试图对缓存进行跨步测试,但程序并没有结束
- 处理除以零会导致<csignal>意外行为
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- vscode下的Arduino代码出现意外编译错误
- 在意外功能结束时进行清理,标准等效
- STD :: Istream意外结束
- C++ 循环意外结束
- .hpp 文件上的意外文件结束错误
- Qt GUI应用程序意外结束
- 链接静态库时意外结束
- #include在查找预编译头文件时跳过——查找预编译头文件时意外结束
- 我的节目意外结束了
- 语法错误,意外的标记,期望文件结束
- 当QFileDialog::getOpenFileName窗口打开时,程序已意外结束
- 线程意外结束.c++
- 文件的意外结束
- 在Qt Windows上.节目意外地结束了