ok.... ho provato ad utilizzare la codifica con il controllo..... ed esce con successo!!!
ho capito perchè hai voluto dichiarare una variabile di tipo unsigned int, perchè ci serve per il controllo, in quanto altrimenti se l'avremmo fatto su un unsigned char avrebbe controllato solo la prima cifra dell'intero valore dato in input e quindi il compilatore l'avrebbe inserito ugualmente nella matrice.......
però non ho capito perchè, dopo aver inserito il valore (t), vai ad effettuare il cast della variabile, ovvero mat[i][j] = (unsigned char)t;