//Tu fais une table de pointeurs vers un tableau contenant les nombres possibles du tirage, par exemple
int k;
int Nmax = 10;
int *tab = (int*)calloc(sizeof(int),Nmax);
for (k=0;k<Nmax;k++) tab[k] = k; // ou bien n'importe quelle autre valeur et dans l'ordre ou tu veux
//Ensuite tu definis un tableau de pointeurs vers chacun de ces elements int **ptr,
int **ptr = (int**)calloc(sizeof(int*),Nmax);
for (k=0;k<Nmax;k++) ptr[k] = &tab[k];
//tu definis un indice temporaire NN qui va te servir a generer un nombre aleatoire dans l'intervalle
//[0,NN]
int NN = Nmax-1;
int *tmp_ptr;
int random_index;
for (k=0;k<Nmax;k++)
{
//Tu generes un nombre aleatoire entre 0 et NN,
random_index = (int)(rand()/(float)RAND_MAX * (NN));
//Cela definit le premier nombre aleatoire tire,
printf("%d\n",*ptr[random_index]);
//Ensuite, tu fais une permutation entre le pointeur tire et le dernier element de ton tableau de pointeurs
tmp_ptr = ptr[Nmax-1-k];
ptr[Nmax-1-k] = ptr[random_index];
ptr[random_index] = tmp_ptr;
//Tu decremente N--, de sorte que le dernier element du tableau de pointeur
//(qui est maintenant celui qui vient d'etre tire) ne puisse pas etre a nouveau selectionne.
NN--;
}
et voila... il y a surement plus astucieux, mais au moins ca te garantit que ton code s'execute avec un nombre determine d'iterations, sans etre oblige de tester a chaque nouveau tirage si le nombre a deja ete tire...
PS: j'ai ecrit ca en 5 minutes, alors il est possible que les indices ne soient pas tout a fait corrects (e.g. NN ou NN-1)