|| while 条件下的操作员未按预期工作

|| operator in while condition not working as expected

所以我是一名新程序员,我决定尝试制作这款游戏​​。这是一个基本的,比方说人与人的游戏。你输入每个团队的数量,在我的例子中是忍者和武士,然后它 运行 确定每个团队的攻击机会并输出获胜者。每次我 运行 我输入每种类型的程序时,我总是得到忍者健康为 0 和武士健康为负的输出。当一个团队的生命值变为 0 时,我如何才能让 while 循环结束?我试过使用 totalNinjaHealth != 0 || totalSamuraiHealth != 0 但程序 运行 无限。

#include <iostream>
#include <random>
#include <string>
#include <ctime>

using namespace std;


int main() {

    int ninjas;
    int NINJA_HEALTH = 2;
    int NINJA_ATTACK = 2;

    int samurai;
    int SAMURAI_HEALTH = 3;
    int SAMURAI_ATTACK = 1;

    default_random_engine randomGen(time(NULL));
    uniform_real_distribution<float> attackChance(0.0f, 1.0f);

    cout << " *** Ninjas V Samurai *** " << endl;
    cout << "Input amount of Ninjas" << endl;
    cin >> ninjas;
    cout << "Input amount of Samurai" << endl;
    cin >> samurai;

    int totalNinjaHealth = NINJA_HEALTH * ninjas;
    int totalSamuraiHealth = SAMURAI_HEALTH * samurai;

    cout << totalNinjaHealth << endl;

    while (totalNinjaHealth > 0 == true || totalSamuraiHealth > 0 == true)
    {
        if (attackChance(randomGen) > 0.5f) {
            totalSamuraiHealth -= NINJA_ATTACK;
            cout << totalSamuraiHealth << endl;
        }
        else if(attackChance(randomGen) < 0.5f) {
            totalNinjaHealth -= SAMURAI_ATTACK;
            cout << totalNinjaHealth << endl;
        }
    }
    if (totalNinjaHealth == 0) {
        cout << "Ninjas lost all " << ninjas << " Ninjas. Samurai remaining " << totalSamuraiHealth << endl;
    }
    else if (totalSamuraiHealth == 0)
    {
        cout << "Samurai lost all " << ninjas << " Samurai. Ninjas that remain " << totalNinjaHealth / 2 << endl;
    }

    cin.get();
    cin.get();
    return 0;
}

运行:ConsoleWhenRan时的截图 我在使用 ||运算符错误?我以为||运算符等到一个条件为真然后停止,但是当我 运行 代码时,它似乎要等到两者都通过,或者等于 0 给出负输出。

发生的情况是:

你 运行 循环,直到任何一个团队的总健康状况为正。因此,两个团队的总生命值是 less/equal 到零。

然后您检查健康状况并得到答案。碰巧的是,在您的情况下,其中一个团队的生命值恰好为 0。但在某些情况下,输出不应显示任何消息。

您需要使用 && 运算符。 ||是 "or" 运算符,当其中一个或两个条件为真时,计算结果为真。在您的情况下,只要您的一个团队的健康状况 > 0,while 循环就会继续评估。"and" 运算符 (&&) 要求两个条件都为真才能将语句评估为真。