它只是保持循环。数字继续减少,直到该计划结束。我滥用了什么吗?
playerHealth和orcHealth ints为100。
randomNumber = ("%10d", 1 + (rand() % 100));
这是我在srand()解释页面上看到的随机数的方式。如果这是错的,应该怎么做?
这里还有其他问题吗?
switch(charDecision)
{
case 1:
cout << "FIGHT" << endl;
do{
randomNumber = ("%10d", 1 + (rand() % 100));
if(randomNumber >= 50){
orcHealth = orcHealth - (randomNumber - (randomNumber / 5));
cout << "You hit the orc! He now has " << orcHealth << " life left!" << endl;
}
else
{
playerHealth = playerHealth - (randomNumber - (randomNumber / 5));
cout << "The orc hit you! You now have " << playerHealth << " life left!" << endl;
}
}while(playerHealth || orcHealth >= 0);
break;
default:
break;
}
答案 0 :(得分:18)
playerHealth || orcHealth >= 0
不意味着“当玩家健康大于零或者orchealth大于零时”。这意味着“当玩家健康时,施放到布尔值是真或者OR orchealth大于零”。
答案 1 :(得分:9)
这个
}while(playerHealth || orcHealth >= 0);
应该是
}while(playerHealth > 0 && orcHealth > 0);
我想你想退出循环,如果其中一个是0或更少。
另外,将randomNumber = ("%10d", 1 + (rand() % 100));
更改为randomNumber = 1 + rand() % 100;
逗号运算符只是模糊代码。
答案 2 :(得分:3)
do...while
语句的条件将在某个时刻停止,但仅在某个时刻停止。这意味着,如果playerHealth
为零或orcHealth
小于零,则会满足您的条件。如果playerHealth
低于零怎么办?这很可能是因为你总是从两个角色的健康状况中扣除一个数字。 playerHealth
变为零的可能性非常小。当playerHealth
低于零时,即使由于整数溢出,其变为零的可能性仍然非常小。所以,如果你想在他们的一个生命值变为零或更少时“杀死”这个角色,你最好用
while ( playerHealth > 0 && orcHealth > 0 )
另外,如果任何其中一个语句为真,则||
语句有效。在C ++中,对于整数,0
值为false,所有其他值(包括负值)都被视为true。此外,||
从左到右进行检查,当它找到第一个true
语句时,它会停止搜索。在您的情况下,它会检查playerHealth
,这很可能是非零的。当它看到此表达式为true时,它会确定parantheses中的整个语句为true
并跳过检查orcHealth >= 0
。这导致无限循环。您可能希望查看C++
,maybe something like this post中条件的评估顺序。