它只是不断循环。数量继续减少,直到程序关闭。我在滥用什么吗?

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/

10-10 19:11