No ... forse non mi sono spiegato ...
Quando fai l'input con
scanf ("%c", &mat[i][j]);
stai acquisendo il dato in formato carattere ... verra' quindi accettato un carattere qualsiasi come
A
!
?
B
Se tu vuoi lavorare (come credo) con i valori ASCII, inserendo quindi
65
66
159
allora e' meglio che utilizzi la riga
scanf ("%u", &mat[i][j]);
anche nella eventuale printf che ti servira' per visualizzare tali valori
printf("%u", mat[i][j]);
Pero', visto che su un dato di tipo unsigned char non potrai mai fare i controlli che vuoi (dato che i valori oltre il range non potranno mai essere contenuti negli elementi del vettore), il ciclo non ha senso di esistere ... quindi potrai scrivere
codice:
void carica_matrice (unsigned char (*mat)[colonne], int R, int C)
{
int i, j;
for (i=0; i<R; i++)
for (j=0; j<C; j++)
{
printf ("\nInserisci valore compreso nell'intervallo [0, 255], in posizione [%d][%d]: ", i, j);
scanf ("%u", &mat[i][j]);
}
}
Se i controllo e' necessario, allora dovrai fare l'input in una variabile temporanea di capacita' maggiore (diciamo un unsigned long), controllare che il suo valore sia nel range 0...255 e assegnare il suo contenuto all'elemento dell'array. Ovvero
codice:
void carica_matrice (unsigned char (*mat)[colonne], int R, int C)
{
int i, j;
unsigned int t;
for (i=0; i<R; i++)
for (j=0; j<C; j++)
do
{
printf ("\nInserisci valore compreso nell'intervallo [0, 255], in posizione [%d][%d]: ", i, j);
scanf ("%u", &t);
mat[i][j] = (unsigned char)t;
} while (t < 0 || t > 255);
}
Dovrai togliere dal confronto anche i segni di eguaglianza perche' i valori 0 e 255 sono leciti ...