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