Siccome la discussione è interessante e si presta a molteplici soluzioni, aggiungo anche la mia.
Per un vettore uni-dimensionale il problema è semplice:
int vett[9],i,j;
srand(time(NULL));
for(i=0;i<9;i++)
{
vett[i] = rand()%9+1;
for(j=0;j<i;j++)
if(vett[i]==vett[j])
{
i--;
break;
}
}
Per una matrice (vettore di vettori) il problema è più complicato, però si può fornire una soluzione simile alla precedente utilizzando i puntatori e tenendo conto del fatto che nella realtà, poiché la memoria di un calcolatore è uni-dimensionale, le matrici vengono effettivamente memorizzate "per righe" quindi a tutti gli effetti come un vettore di m*n elementi, se m è il numero di righe e n il numero di colonne della matrice. Propongo una soluzione più generica in cui si possono definire i valori di m e n:
const int m=3, n=3;
int *p_ij, *p_k;
int a[m][n];
srand(time(NULL));
for(p_ij=&a[0][0]; p_ij<=&a[m-1][n-1]; p_ij++)
{
*p_ij = rand()%(m*n) + 1;
for(p_k=&a[0][0]; p_k<p_ij; p_k++)
if(*p_ij==*p_k)
{
p_ij--;
break;
}
}
P.S. ho aggiunto anche un break nel ciclo più interno per evitare inutili confronti (anche se sulle macchine moderne è quasi ininfluente per dimensioni modeste).