Ho creato una classe che simula un mazzo di carte, la funzione Print() stampa le prime cinque carte,poi mi serve una funzione Mescola() che assegna i valori delle carte in maniera casuale.Per questo ho usato rand(), ma il problema è che ogni volta che viene assegnato il valore a una carta, bisogna controllare che il valore non sia già stato assegnato, altrimenti ci troveremo un mazzo di carte con dei "doppioni".
Per questo ho creato un array di 52 bool (busy[52]), ogni volta che un valore viene assegnato (per intenderci, busy[0] rappresenta l' asso di cuori, busy[51] il re di picche, in ordine di valore) il corrispettivo bool viene settato a true, e ripeto la funzione rand() finchè non si trova un valore libero.
Ma il programma non finisce mai, ho provato a debuggarlo stampando i, e vedo che è fermo a 24, non so perchè.
Questo è il codice:
codice:
using namespace std;

typedef struct
{
    int valore;
    char seme;
}carta;

class Mazzo
{
    public:
    Mazzo();
    void Print();
    void Mescola(void);
    private:
    carta mazzo[52];
};

Mazzo::Mazzo()
{
    int i,j=0;
    for(i=0;i<52;i++,j++)
    {
        if(j==13)
            j=0;
        mazzo[i].valore=j+1;
        if(i<13)
            mazzo[i].seme='c';
        else if(i>=13 && i<26)
            mazzo[i].seme='q';
        else if(i>=26 && i<39)
            mazzo[i].seme='f';
        else
            mazzo[i].seme='p';
    }
}

void Mazzo::Print()
{
    int i;
    cout <<"\n";
    for(i=0;i<5;i++)
    {
        switch(mazzo[i].valore)
        {
            case 1:
                cout << "Asso";
                break;
            case 2:
                cout << "Due";
                break;
            case 3:
                cout << "Tre";
                break;
            case 4:
                cout << "Quattro";
                break;
            case 5:
                cout << "Cinque";
                break;
            case 6:
                cout << "Sei";
                break;
            case 7:
                cout << "Sette";
                break;
            case 8:
                cout << "Otto";
                break;
            case 9:
                cout << "Nove";
                break;
            case 10:
                cout << "Dieci";
                break;
            case 11:
                cout << "Jack";
                break;
            case 12:
                cout << "Donna";
                break;
            case 13:
                cout << "Re";
                break;
        }
        switch(mazzo[i].seme)
        {
            case 'c':
                cout << "\tCuori" << endl;
                break;
            case 'q':
                cout << "\tQuadri" << endl;
                break;
            case 'f':
                cout << "\tFiori" << endl;
                break;
            case 'p':
                cout << "\tPicche" << endl;
                break;
        }
    }
    cout <<"\n";
}


void Mazzo::Mescola(void)
{
    int random,i;
    bool busy[52];
    srand((unsigned) time(NULL));
    for(i=0;i<52;i++)
    {
        do
        {
            random=rand()%52;
        }while(busy[random]==true);
        busy[random]=true;
        if(random<13)
        {
            mazzo[i].seme='c';
            mazzo[i].valore=random+1;
        }
        else if(random>=13 && random<26)
        {
            mazzo[i].seme='q';
            mazzo[i].valore=random-12;
        }
        else if(random>=26 && random<39)
        {
            mazzo[i].seme='f';
            mazzo[i].valore=random-25;
        }
        else
        {
            mazzo[i].seme='p';
            mazzo[i].valore=random-38;
        }
    }
}

int main (int argc, const char **argv)
{
    Mazzo t;
    t.Mescola();
    t.Print();
    return 0;
}