Questo è quello che ho fatto fino ad adesso, penso di aver più o meno avuto la sua stessa pensata, ma dà errore sia se definisco tavolo come matrice di carta che come matrice di interi e non so come farlo diventare accettabile
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef struct carta //definisco la struttura carta
{
char *seme;
int valore;
char *faccia;
}carta;
int main ()
{ int i;
int j;
int m;
int n;
carta mazzo[32]; //definisco l'array mazzo che contiene le mie 32 carte e le inizializzo una ad una
mazzo[0] = {"picche", 1 , "A"};
mazzo[1] = {"picche", 2 , "J"};
mazzo[2] = {"picche", 3 , "Q"};
mazzo[3] = {"picche", 4 , "K"};
mazzo[4] = {"picche", 1 , "A"};
mazzo[5] = {"picche", 2 , "J"};
mazzo[6] = {"picche", 3 , "Q"};
mazzo[7] = {"picche", 4 , "K"};
mazzo[8] = {"cuori", 1 , "A"};
mazzo[9] = {"cuori", 2 , "J"};
mazzo[10] = {"cuori", 3 , "Q"};
mazzo[11] = {"cuori", 4 , "K"};
mazzo[12] = {"cuori", 1 , "A"};
mazzo[13] = {"cuori", 2 , "J"};
mazzo[14] = {"cuori", 3 , "Q"};
mazzo[15] = {"cuori", 4 , "K"};
mazzo[16] = {"quadri", 1 , "A"};
mazzo[17] = {"quadri", 2 , "J"};
mazzo[18] = {"quadri", 3 , "Q"};
mazzo[19] = {"quadri", 4 , "K"};
mazzo[20] = {"quadri", 1 , "A"};
mazzo[21] = {"quadri", 2 , "J"};
mazzo[22] = {"quadri", 3 , "Q"};
mazzo[23] = {"quadri", 4 , "K"};
mazzo[24] = {"fiori", 1 , "A"};
mazzo[25] = {"fiori", 2 , "J"};
mazzo[26] = {"fiori", 3 , "Q"};
mazzo[27] = {"fiori", 4 , "K"};
mazzo[28] = {"fiori", 1 , "A"};
mazzo[29] = {"fiori", 2 , "J"};
mazzo[30] = {"fiori", 3 , "Q"};
mazzo[31] = {"fiori", 4 , "K"};
carta tavolo[4][8];
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
tavolo[i][j]=0;
}
}
for(i=0;i<32;i++)
{
m=rand()%4+1;
n=rand()%8+1;
if(tavolo[m][n]==0)
{
mazzo[i]=tavolo[m][n]
}
}
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
printf("%d", tavolo[i][j]);
}
}