我的if语句执行不正确(跳过if)



我正在尝试对21点进行编码,我已经完成了,但我有一个问题。对于获得更多牌的发牌人来说,应该继续获得更多牌;dealerTotal;为17或更高。但是,我有一个问题,经销商总是只拿一张牌,然后站起来。这个代码以前是有效的,并且会一直使用另一张卡,直到超过16。但是,现在它不起作用了,我使用了一些版本差异检查,没有什么不同。

if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (loop == 1) // will keep looping until it breaks (over 17)
{
if (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal = dealerTotal + dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
break;
}
if (dealerTotal > 17 || dealerTotal == 17)
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
else (dealerTotal > 17 || dealerTotal == 17)
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break; 

}
}

我试过去掉最后一个else,然后把它变成else,如果两者都不起作用。

完全删除其他使其在读取总数后不做任何事情

如果没有做任何我能注意到的事情,添加其他内容。

如果有帮助的话,两张初始卡片是使用以下代码创建的:

srand(time(NULL));
Pcard1 = rand() % 13 + 1;
Pcard2 = rand() % 13 + 1;
dealercard1 = rand() % 13 + 1;
dealercard2 = rand() % 13 + 1;

17 <= dealerTotal < 21:时,您没有正确中断循环

else (dealerTotal > 17 || dealerTotal == 17)
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break; 

首先,else的格式不正确,需要改为else if (...)。但即便如此,break也只是没有附加到else,因此它将在第一次循环迭代结束时无条件地执行。这就是为什么发牌人只拿一张牌的原因。它需要看起来像这样:

else // dealerTotal >= 17
{ // <-- add this...
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break; 
} // <-- add this...

试试这个:

if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (loop == 1) // will keep looping until it breaks (over 17)
{
if (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal += dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
break;
}
if (dealerTotal >= 17)
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
else
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break; 
}
}
}

然后可以稍微简化一下,以消除dealerTotal >= 17:的冗余检查

if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (loop == 1) // will keep looping until it breaks (over 17)
{
if (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal += dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
break;
}
}
else
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
break;
}
}
}

然后,我建议通过忽略loop变量来进一步简化逻辑,这在代码中没有任何用处:

if (playerTotal <= 21)
{
cout << endl;
cout << "The dealer's two cards are: " << dealercard1 << " & " << dealercard2 << endl;
cout << "The dealer's total is: " << dealerTotal << endl;
while (dealerTotal < 17)
{
dealercardNew = rand() % 13 + 1;
cout << endl;
cout << "The dealer's new card is: " << dealercardNew << endl;
if (dealercardNew > 10) // sets jack, queen and king to 10
{
dealercardNew = 10;
}
dealerTotal += dealercardNew; // adding new card to total
cout << "The dealer's new total is: " << dealerTotal << endl;
}
if (dealerTotal > 21) // dealer loss
{
cout << "The dealer's deck went Bust!" << endl;
}
else
{
cout << "The Dealer chose to stand with: " << dealerTotal << endl;
}
}

最新更新