void CardSet::Print() const
{
for(int i=0; i > nCards; i++)
{
PrintCard(i);
}
}
должно быть
void CardSet::Print() const
{
for(int i=0; i < nCards; i++)
{
PrintCard(i);
}
}
, чтобы исправить окончание теста, и у вас та же проблема с CardSet::CardSet(int c)
, которая должна быть
CardSet::CardSet(int c)
{
nCards = c;
Card = new int[c];
for(int i = 0; i < c; i++)
{
Card[i] = (i % 52);
}
}
, где nCards также должен быть установлен.
В для тест показывает, продолжается ли цикл, а не заканчивается ли он
for (inits; test; changes) ...
эквивалентно
init;
while (test) {
...
changes;
}
Из-за этого в PrintCard не выполняется разделитель cout << NameRank[Rank] << NameSuit[Suit];
, поэтому может потребоваться добавить что-то вроде пробела в Print :
void CardSet::Print() const
{
for(int i=0; i < nCards; i++)
{
PrintCard(i);
cout << ' ';
}
}
или PrintCard для разделения двух полей, таких как
cout << NameRank[Rank] << ' ' << NameSuit[Suit] << endl;
Обратите внимание, что вы можете упростить
const char NameSuit[5] = "SCDH";
const char NameRank[14] = "23456789XJQKA";
cout << NameRank[Rank] << NameSuit[Suit];
до
cout << "23456789XJQKA"[Rank] << "SCDH"[Suit];
Или, если вы действительно хотите иметь массивы, я призываю вас не указывать размер, чтобы избежать проблем, если вы измените буквенную строку и забудете также изменить размер, поэтому
const char NameSuit[] = "SCDH";
const char NameRank[] = "23456789XJQKA";
Например, имеющий:
#include <iostream>
using namespace std;
class CardSet
{
public:
CardSet();
CardSet(int);
~CardSet();
int Size() const;
bool IsEmpty() const;
void Shuffle();
int Deal();
void Deal(int,CardSet&,CardSet&);
void Deal(int,CardSet&,CardSet&,CardSet&,CardSet&);
void AddCard(int);
void MergeShuffle(CardSet&);
void Print() const;
private:
int* Card;
int nCards;
};
void PrintCard(int c)
{
int Rank = c%13;
int Suit = c/13;
cout << "23456789XJQKA"[Rank] << ' ' << "SCDH"[Suit] << endl;
}
CardSet::CardSet()
{
Card = NULL;
nCards = 0;
}
CardSet::CardSet(int c)
{
nCards = c;
Card = new int[c];
for(int i = 0; i < c; i++)
{
Card[i] = (i % 52);
}
}
CardSet::~CardSet()
{
delete[] Card;
}
bool CardSet::IsEmpty() const
{
return nCards == 0;
}
void CardSet::Print() const
{
for(int i=0; i < nCards; i++)
{
PrintCard(i);
}
}
int CardSet::Size() const
{
return nCards;
}
int main(void)
{
CardSet cs(5);
cs.Print();
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra c.cc
pi@raspberrypi:/tmp $ ./a.out
2 S
3 S
4 S
5 S
6 S
pi@raspberrypi:/tmp $