C ++ OR运算符仅在第1部分为真时才拒绝停止

Dee*_*nce -1 c++

我一直在玩一些教程,并且到达了使用“ 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)

我有点迷失在这里,很乐意提供帮助,我做错了什么。

Fal*_*Ger 5

||当至少一个条件为true时,OR运算符()返回true。在您的情况下,这意味着骨架和人类都必须为0或更小才能使循环停止。或者更确切地说,如果其中至少一个> 0,它将继续。
当您使用AND(&&)时,您将获得正确的行为,当所有操作数均为true时,此行为才返回true。


Pro*_*gle 5

while (humanCount > 0 || skeletonCount > 0) 意味着如果这些条款成立,您的代码将继续执行。如果skeletonCount = -4且humanCount = 2,则其中一项仍然适用,因此您的代码将继续运行。您想使用AND&&