||操作员在条件不按预期工作时

时间:2015-11-07 14:47:46

标签: c++ operators

所以我是一名新程序员,我决定尝试制作这款游戏​​。这是一个基本的,比方人和人类游戏。您输入每个团队的数量,在我的案例中为Ninjas和Samurai,然后随机化每个团队的攻击几率并输出获胜者。每次我运行程序时,我输入每种类型的数量,并且我总是获得Ninjas的输出为0健康,而Samurai的健康状况为负。当一个团队达到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给出负输出。

2 个答案:

答案 0 :(得分:1)

您需要使用&amp;&amp;运营商。 ||是“或”运算符,当其中一个或两个条件为真时,将评估为true。在你的情况下,只要你的一个团队有健康&gt;,while循环就会继续评估。 0.“和”运算符(&amp;&amp;)要求两个条件都为真,以便将语句评估为真。

答案 1 :(得分:0)

会发生什么:

你运行循环,直到任何一支球队的总生命值为正。因此,两支球队的总生命值都小于/等于零。

然后你检查健康状况,你就得到了答案。事实恰恰相反,在你的情况下,其中一支队伍的健康状况正好死亡。但在某些情况下,输出应该既不显示消息也不显示消息。