C++ 为什么这件事永远不会结束?
它只是不断循环。在程序关闭之前,数字将继续减少。我是不是误用了什么 playerHealth和orcHealth Int为100C++ 为什么这件事永远不会结束?,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{
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:
coutplayerHealth | | 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)我想这就是他想要的。@fiscblog你认为这场战斗应该持续到双方都死了吗?那可能行得通。当双方都是僵尸时,战斗就会停止,因为僵尸结成了团队。:)@hvd不死兽人僵尸呜呜!这是个好主意