我一直在玩一些教程,并且到达了使用“ while”的位置,OR运算符仅在第一个条件为true时停止,而在第二个条件为true时才停止,即使第二个条件已经满足在某些循环中确实如此。
while (humanCount > 0 || skeletonCount > 0)
{
cout << "Humans left: " << humanCount << " | Skeletons left: " << skeletonCount << "\n";
if (currentTurn == 0) // Human Attack
{
if (rollChance(randomNum) >= 0.5f)
{
skeletonCurrentHealth -= rollDamage(randomNum);
if (skeletonCurrentHealth <= 0)
{
skeletonCount--;
skeletonCurrentHealth = skeletonMaxHealth;
}
}
currentTurn = 1;
}
else // Skeleton Attack
{
if (rollChance(randomNum) >= 0.7f)
{
humanCurrentHealth -= rollDamage(randomNum);
if (humanCurrentHealth <= 0)
{
humanCount--;
humanCurrentHealth = humanMaxHealth;
}
}
currentTurn = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
从印刷品中我得到的是这样的:
Humans left: 3 | Skeletons left: 5
Humans left: 3 | Skeletons left: 4
Humans left: 3 | Skeletons left: 3
Humans left: 2 | Skeletons left: 3
Humans left: 2 | Skeletons left: 2
Humans left: 2 | Skeletons left: 1
Humans left: 2 | Skeletons left: 0
Humans left: 2 | Skeletons left: -1
Humans left: 1 | Skeletons left: -1
Humans left: 1 | Skeletons left: -2
Humans left: 1 | Skeletons left: -3
Humans left: 0 | Skeletons left: -3
Humans have won!
Run Code Online (Sandbox Code Playgroud)
我有点迷失在这里,很乐意提供帮助,我做错了什么。
||当至少一个条件为true时,OR运算符()返回true。在您的情况下,这意味着骨架和人类都必须为0或更小才能使循环停止。或者更确切地说,如果其中至少一个> 0,它将继续。
当您使用AND(&&)时,您将获得正确的行为,当所有操作数均为true时,此行为才返回true。
while (humanCount > 0 || skeletonCount > 0)
意味着如果这些条款成立,您的代码将继续执行。如果skeletonCount = -4且humanCount = 2,则其中一项仍然适用,因此您的代码将继续运行。您想使用AND&&