foreach выводит только последний элемент массива

Программа должна выводить на экран игральные карты в виде двухбуквенного кода, но выводится только последняя карта в колоде.

#include "stdafx.h"
#include <iostream>
#include <array>

enum Value
{
    TWO=2,
    THREE,
    FOUR,
    FIVE,
    SIX,
    SEVEN,
    EIGHT,
    NINE,
    TEN,
    JACK,
    DAME,
    KING,
    ACE,
    MAX_VALUE
};

enum Suit
{
    HEARTS,
    DIAMONDS,
    CLUBS,
    SPADES,
    MAX_SUIT
};

struct card
{
    Value value;
    Suit suit;
};

void printCard(const card &Card)
{
    switch (Card.value)
    {
    case TWO: std::cout << 2; break;
    case THREE: std::cout << 3; break;
    case FOUR: std::cout << 4; break;
    case FIVE: std::cout << 5; break;
    case SIX: std::cout << 6; break;
    case SEVEN: std::cout << 7; break;
    case EIGHT: std::cout << 8; break;
    case NINE: std::cout << 9; break;
    case TEN: std::cout << 10; break;
    case JACK: std::cout << "J"; break;
    case DAME: std::cout << "D"; break;
    case KING: std::cout << "K"; break;
    case ACE: std::cout << "A"; break;
    };

    switch (Card.suit)
    {
    case 0: std::cout << "H "; break;
    case 1: std::cout << "D "; break;
    case 2: std::cout << "C "; break;
    case 3: std::cout << "S "; break;
    };
};

void printDeck(const std::array<card,52> &deck)
{
    for (const card &cards : deck)
        printCard(cards);
};

int main()
{
    std::array<card, 52> deck;
    int count{ 0 };
    for (int suit_count{ 0 }; suit_count < MAX_SUIT; suit_count++)
    {
        for (int value_count{ 0 }; value_count < MAX_VALUE; value_count++)
        {
            deck[count].suit = static_cast<Suit>(suit_count);
            deck[count].value = static_cast<Value>(value_count);
        };
    };
    printDeck(deck);
    return 0;
}

Ответы (1 шт):

Автор решения: Harry
int count{ 0 };
for (int suit_count = HEARTS; suit_count < MAX_SUIT; suit_count++)
{
    for (int value_count = TWO; value_count < MAX_VALUE; value_count++)
    {
        deck[count].suit  = static_cast<Suit>(suit_count);
        deck[count].value = static_cast<Value>(value_count);
        count++;
    };
};

И еще - я бы написал функцию вывода немного иначе:

void printCard(const card &Card)
{
    if (Card.value <= 10) std::cout << Card.value;
    else std::cout << "JQKA"[Card.value-11];
    std::cout << "HDCS"[Card.suit] << " ";
};
→ Ссылка