C++ 一副牌输出错误

C++ 一副牌输出错误,c++,arrays,struct,C++,Arrays,Struct,我正在尝试为我正在制作的游戏制作一副牌。为什么我在这里得到了错误的结果?代码应该输出52张卡片中的每一张卡片。我是结构方面的新手,但我认为到目前为止我对这段代码做得很好。是的,我知道有更好的方法做同样的事情,但我是一个初学者,所以不要评判我 int main() { struct Card { int value; char suit; }; Card cards[52]; //Declaring each unique car

我正在尝试为我正在制作的游戏制作一副牌。为什么我在这里得到了错误的结果?代码应该输出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;
}
编辑:

问题是

cards[i].suit = i / 13;
将产生一个介于0和3之间的值,而不是代码假定的1和4之间的值

同样的问题也存在于

cards[i].value = i % 13;
它给出的值介于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
应该是

    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    else if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    else if ... etc etc
在您的版本中,第一个if语句if true会将值设置为1,但下一个if语句将为true并将值设置为2,依此类推。使用elseif可以确保只执行一条if语句

我相信这些应该代表Q,J和K?可能是打字错误

此外,i/13将始终向下取整。这将解决以下问题:


简单的方法是写卡片[i]。诉讼= = 0 {卡[i]。诉讼= = ' d;}等。@ AtasoRIDsS翼WANABE C++程序员需要学会开始计数零。为了公平起见,他们在大多数代码中都在做这些。@john,这并不意味着你不能在代码中的任何地方使用+1来产生正确的结果。@Pneuma除非我能看到最新的代码,否则我不能说你的最新版本有什么问题。编辑问题并添加最新版本的代码。您只希望执行一条if语句,这就是使用else if所做的,只要一条if语句为true,其余语句将被跳过。在您的版本中,这不是真的,不幸的是,如果一条语句将卡片值设置为5,那么下一条if语句将测试卡片值是否为5,并将其设置为6,因此您将获得一系列赋值,直到卡片值达到10。
    if (cards[i].value == 0) {
        cards[i].value = 1;
    }
    else if (cards[i].value == 1) {
        cards[i].value = 2;
    }
    else if ... etc etc
   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 == 0) {
       cards[i].suit = 'D';
   }
   if (cards[i].suit == 1) {
       cards[i].suit = 'H';
   }
   if (cards[i].suit == 2) {
       cards[i].suit = 'C';
   }
   if (cards[i].suit == 3) {
       cards[i].suit = 'S';
   }