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

时间:2021-06-17 23:20:37

标签: c++ if-statement while-loop

我正在尝试编写 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 if 但两者都不起作用。

将 else 完全删除后,它不会做任何事情

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

如果有帮助,将使用此代码创建两张初始卡片:

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

1 个答案:

答案 0 :(得分: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;
    }
}