Неверный вывод в C ++ 32244 ошибка сегментации (ядро сброшено)

    //Deck.cc
#include <iostream>
#include <string>
#include <vector>
enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES };
enum Rank {
ACE = 1,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING
};
struct Card {
Rank rank;
Suit suit;
void print() const;
// Card(Suit s,Rank r);
};
struct Deck {
std::vector<Card> cards;
Deck(int n);
Deck();
void print() const;
};
void Deck::print() const {
unsigned len = cards.size();
for (size_t i = 0; i < len; i++) {
cards[i].print();
}
}

Deck::Deck() {
std::vector<Card> temp(52);
cards = temp;
int i = 0;
for (Suit suit = CLUBS; suit <= SPADES; suit = Suit(suit + 1)) {
for (Rank rank = ACE; rank <= KING; rank = Rank(rank + 1)) {
cards[i].suit = suit;
cards[i].rank = rank;
i++;
}
}
}

Deck::Deck(int size) {
std::vector<Card> temp(size);
cards = temp;
}
void Card::print() const {
std::vector<std::string> suits(4);
suits[0] = "Club";
suits[1] = "Diamond";
suits[2] = "Heart";
suits[3] = "Spade";
std::vector<std::string> ranks(13);
ranks[1] = "Ace";
ranks[2] = "2";
ranks[3] = "3";
ranks[4] = "4";
ranks[5] = "5";
ranks[6] = "6";
ranks[7] = "7";
ranks[8] = "8";
ranks[9] = "9";
ranks[10] = "10";
ranks[11] = "Jack";
ranks[12] = "Queen";
ranks[13] = "King";
std::cout << ranks[rank] << " of " << suits[suit] << '\n';
}
int main(int argc, char const *argv[]) {
Deck deck1;
// std::cout << deck.cards[0].suit << '\n';
std::cout << "rank=" << deck1.cards[0].rank << '\n';
deck1.cards[0].print();
deck1.cards[3].print();
// deck.cards[1].print();
// deck.print();
return 0;
}

Я просто изучаю C ++ в думаю-каст
Я написал этот код для описания колоды карт.

после g ++ Deck.cc -o Deck
./ Deck
ранг равен 1, когда я использую «cout», чтобы вывести его. Я за исключением того, что он должен вывести Ace of Club. Но он превращается в 4 of Club.

И это все еще выводит 4 Клуба, когда ранг равен 3.
Что не так в моем коде?
это выводится так

-1

Решение

Индексы начинаются с 0:

Это:

std::vector<std::string> ranks(13);
ranks[1] = "Ace";
...
ranks[13] = "King";   // ranks has only 13 entries, here you access element 14, the first beeing element 0

должно быть:

std::vector<std::string> ranks(13);
ranks[0] = "Ace";
...
ranks[12] = "King";

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector