首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >牌套错误输出

牌套错误输出
EN

Stack Overflow用户
提问于 2020-04-26 21:28:29
回答 2查看 55关注 0票数 0

我试着为我正在制作的游戏创造一副牌。为什么我在这里得到了错误的结果?代码应该输出52张卡片中的每一张卡。我在结构方面是新的,但我认为到目前为止,我在这段代码方面做得很好。是的,我知道有更好的方法来做同样的事情,但我是一个初学者,所以不要评判我。

代码语言:javascript
复制
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;
}

编辑:

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-26 21:31:54

问题是

代码语言:javascript
复制
cards[i].suit = i / 13;

将产生介于0和3之间的值,而不是代码假设的1和4之间的值。

同样的问题也存在于

代码语言:javascript
复制
cards[i].value = i % 13;

它提供的值介于0到12之间,而不是1和13之间。

好的,最新的问题

代码语言:javascript
复制
    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    if ... etc etc

应该是

代码语言:javascript
复制
    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    else if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    else if ... etc etc

在您的版本中,第一个if语句(如果为真)将值设置为1,然后下一个if语句将为true,并将值设置为2,依此类推。使用else if确保只执行一个if语句。

票数 5
EN

Stack Overflow用户

发布于 2020-04-26 21:41:51

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; }

我相信这些应该代表Q,J和K?不过可能是个错误。

此外,我/ 13将永远在四舍五入。这应该解决诉讼问题:

cardsi.suit =I/ 13;// 4适合if (cardsi.suit == 0) { cardsi.suit = 'D';} if (cardsi.suit == 1) { cardsi.suit = 'H';} if (cardsi.suit == 2) { cardsi.suit = 'C';} if (cardsi.suit == 3) { cardsi.suit = 'S';}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61448346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档