一副纸牌错误输出

Pne*_*uma 0 c++ arrays struct

我正在尝试为我正在制作的游戏制作一副纸牌。为什么我在这里得到错误的结果?该代码应该输出一副 52 张牌中的每张牌。我是结构方面的新手,但我认为到目前为止我对这段代码做得很好。是的,我知道有更好的方法可以做完全相同的事情,但我是初学者,所以不要评判我。

int main()
{
    struct Card 
    {
        int value;
        char suit;
    };

    Card cards[52]; //Declaring each unique card
    for (int i = 0; i < 52; i++)
    {
        cards[i].value = i % 13; // 13 values
        if (cards[i].value == 1) {
            cards[i].value = 1;
        }
        if (cards[i].value == 2) {
            cards[i].value = 2;
        }
        if (cards[i].value == 3) {
            cards[i].value = 3;
        }
        if (cards[i].value == 4) {
            cards[i].value = 4;
        }
        if (cards[i].value == 5) {
            cards[i].value = 5;
        }
        if (cards[i].value == 6) {
            cards[i].value = 6;
        }
        if (cards[i].value == 7) {
            cards[i].value = 7;
        }
        if (cards[i].value == 8) {
            cards[i].value = 8;
        }
        if (cards[i].value == 9) {
            cards[i].value = 9;
        }
        if (cards[i].value == 10) {
            cards[i].value = 10;
        }
        if (cards[i].value == 11) {
            cards[i].value = 10;

        }
        if (cards[i].value == 12) {
            cards[i].value = 10;
        }
        if (cards[i].value == 13) {
            cards[i].value = 10;
        }


        cards[i].suit = i / 13;// 4 suits
        if (cards[i].suit == 1) {
            cards[i].suit = 'D';
        }
        if (cards[i].suit == 2) {
            cards[i].suit = 'H';
        }
        if (cards[i].suit == 3) {
            cards[i].suit = 'C';
        }
        if (cards[i].suit == 4) {
            cards[i].suit = 'S';
        }
    }
    for (int count = 0; count < 52; count++) {
        cout << cards[count].value;
        cout << cards[count].suit;
        cout << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

int main()
{
    struct Card //struct is a way to store many values on 1 array for example
    {
        int value;
        char suit;
    };

    Card cards[52]; //Declaring each unique card
    for (int i = 0; i < 52; i++)
    {
        cards[i].value = i % 13; // 13 values
        if (cards[i].value == 0) {
            cards[i].value = 1;
        }
        else if (cards[i].value == 1) {
            cards[i].value = 2;
        }
        else if (cards[i].value == 2) {
            cards[i].value = 3;
        }
        else if (cards[i].value == 3) {
            cards[i].value = 4;
        }
        else if (cards[i].value == 4) {
            cards[i].value = 5;
        }
        else if (cards[i].value == 5) {
            cards[i].value = 6;
        }
        else if (cards[i].value == 6) {
            cards[i].value = 7;
        }
        else if (cards[i].value == 7) {
            cards[i].value = 8;
        }
        else if (cards[i].value == 8) {
            cards[i].value = 9;
        }
        else if (cards[i].value == 9) {
            cards[i].value = 10;
        }
        else if (cards[i].value == 10) {
            cards[i].value = 10;

        }
        else if (cards[i].value == 11) {
            cards[i].value = 10;
        }
        else if (cards[i].value == 12) {
            cards[i].value = 10;
        }


        cards[i].suit = i / 13;// 4 suits
        if (cards[i].suit == 0) {
            cards[i].suit = 'D';
        }
        else if (cards[i].suit == 1) {
            cards[i].suit = 'H';
        }
        else if (cards[i].suit == 2) {
            cards[i].suit = 'C';
        }
        else if (cards[i].suit == 3) {
            cards[i].suit = 'S';
        }
    }
    for (int count = 0; count < 52; count++) {
        cout << cards[count].value;
        cout << cards[count].suit;
        cout << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

joh*_*ohn 5

问题是

cards[i].suit = i / 13;
Run Code Online (Sandbox Code Playgroud)

将产生一个介于 0 和 3 之间的值,而不是像您的代码假定的 1 和 4。

同样的问题存在于

cards[i].value = i % 13;
Run Code Online (Sandbox Code Playgroud)

它给出了 0 到 12 之间的值,而不是 1 和 13。

好的,最新问题

    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    if ... etc etc
Run Code Online (Sandbox Code Playgroud)

应该

    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    else if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    else if ... etc etc
Run Code Online (Sandbox Code Playgroud)

在您的版本中,第一个 if 语句(如果为 true)会将值设置为 1,但接下来的 if 语句将为 true 并将值设置为 2,依此类推。Usingelse if确保只执行一个 if 语句。