它只是不断循环。数量继续减少,直到程序关闭。我在滥用什么吗?
playerHealth和orcHealth的整数是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;
}
最佳答案
您对do...while
语句的条件将在某个时候停止,但只会在某个时候停止。这意味着,如果playerHealth
为零或orcHealth
小于零,则将满足您的条件。如果playerHealth
低于零怎么办?这很可能是因为您总是从两个角色的健康状况中扣除一个数字。 playerHealth
完全变为零的可能性很小。并且当playerHealth
降至零以下时,即使由于整数溢出,也很难将其变为零。因此,如果您想在某个角色的生命值变为零或更少时“杀死”该角色,则最好使用以下方式更改该行:
while ( playerHealth > 0 && orcHealth > 0 )
顺便说一句,如果任何一个语句为true,
||
语句将起作用。在C++中,对于整数,0
值为false,所有其他值(包括负值)都视为true。同样,||
从左到右进行检查,当它找到第一个true
语句时,它将停止搜索。在您的情况下,它将检查playerHealth
,它很可能非零。当看到该表达式为true时,它会确定括号中的整个语句为true
,并跳过对orcHealth >= 0
的检查。这导致无限循环。您可能需要查看C++
和maybe something like this post中条件语句的求值顺序。关于c++ - 为什么这样做/永远不会结束?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18247627/