|| 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" 运算符 (&&) 要求两个条件都为真才能将语句评估为真。
所以我是一名新程序员,我决定尝试制作这款游戏。这是一个基本的,比方说人与人的游戏。你输入每个团队的数量,在我的例子中是忍者和武士,然后它 运行 确定每个团队的攻击机会并输出获胜者。每次我 运行 我输入每种类型的程序时,我总是得到忍者健康为 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" 运算符 (&&) 要求两个条件都为真才能将语句评估为真。