#c
#c
Вопрос:
Я играл с некоторыми руководствами, и я дошел до части, где я использую «while», оператор OR останавливается только тогда, когда 1-е условие истинно, и не тогда, когда 2-е условие выполняется, даже если 2-е условие было истинным для некоторых циклов.
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;
}
}
Из печати я получаю что-то вроде:
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!
Я здесь немного потерялся, хотел бы получить помощь, что я сделал не так.
Комментарии:
1. хотя не останавливается, когда условие истинно, оно останавливается, когда условие ложно, в вашем случае, когда обе части являются ложными. Прочитайте закон Д’Моргана
2. Или это неправильный вариант здесь, вам нужно некоторое время (humancount > 0 amp;amp; skeletoncount> 0)
Ответ №1:
while (humanCount > 0 || skeletonCount > 0)
Означает, что ваш код продолжит выполняться, если ЛЮБОЕ из условий истинно. Если skeletonCount = -4 и humanCount = 2, то одно из условий по-прежнему истинно, поэтому ваш код продолжит выполняться. Вы хотите использовать И amp;amp;
Ответ №2:
Оператор OR ( ||
) возвращает значение true, когда выполняется хотя бы одно условие. В вашем случае это означало бы, что и скелеты, и люди должны быть равны 0 или меньше, чтобы цикл остановился. Или, скорее, это продолжится, если хотя бы один из них равен > 0.
Вы получаете правильное поведение при использовании AND ( amp;amp;
), которое возвращает значение true только тогда, когда все операнды имеют значение true.