C++ 为什么这件事永远不会结束?

C++ 为什么这件事永远不会结束?,c++,infinite-loop,do-while,C++,Infinite Loop,Do While,它只是不断循环。在程序关闭之前,数字将继续减少。我是不是误用了什么 playerHealth和orcHealth Int为100 randomNumber = ("%10d", 1 + (rand() % 100)); 这就是我在srand()解释页面上看到的随机数。如果这是错误的,应该怎么做 这里还有其他问题吗 switch(charDecision) { case 1: cout << "FIGHT" << endl; do{

它只是不断循环。在程序关闭之前,数字将继续减少。我是不是误用了什么

playerHealth和orcHealth Int为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;
}
开关(charDecision)
{
案例1:

cout
playerHealth | | orchhealth>=0
的意思是“当playerHealth大于零或orchhealth大于零时”。它表示“当playerHealth时,强制转换为布尔值为真或orchhealth大于零时”。

<

}while(playerHealth || orcHealth >= 0);
应该是

}while(playerHealth > 0 && orcHealth > 0);
如果其中一个值为0或更小,我认为您希望退出循环

另外,将
randomNumber=(“%10d”,1+(rand()%100));
更改为
randomNumber=1+rand()%100;

逗号运算符只是混淆了代码。

您的
do…while
语句的条件将在某个点停止,但仅在某个点停止。这意味着,如果
playerHealth
为零或
orcHealth
小于零,您的条件将得到满足。如果
playerHealth
低于零,该怎么办很有可能,因为你总是从两个角色的健康状况中扣除一个数字。
playerHealth
完全变为零的可能性非常小。
playerHealth
低于零时,变为零的可能性仍然很小,即使是由于整数溢出。因此,如果你想“杀死”当角色的某个生命值变为零或更少时,最好用以下内容更改该行

while ( playerHealth > 0 && orcHealth > 0 )

在一个旁注下,如果任何一个语句都是真的,则<代码> > <代码>语句工作。在C++中,对于整数A <代码> 0代码/>值是错误的,所有其他值(包括负值)都被视为真的。此外,<代码> < <代码>从左到右检查,当它找到第一个<代码>真< /COD>语句时,它停止搜索。在这种情况下,它检查

playerHealth
,这很可能是非零的。当它看到这个表达式为true时,它决定parantesses中的整个语句为
true
,并跳过检查
或health>=0
。这将导致无限循环。您可能需要查看
中条件的求值顺序>C++
,.

嗯,
rand
调用确实有模数偏差。我建议使用
。即玩家健康需要精确为0才能评估为假,好的捕获
},而(玩家健康>0 | |或健康>0)