1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #include <stdio.h>
#include <stdlib.h>
#define MAT_NB_LIGNES 3
#define MAT_NB_COLS 4
void clean(void)
{
int c;
while ((c =getc(stdin)) != '\n' && c != EOF)
{
}
}
/* -tc- la fonction appelante alloue la mémoire pour la matrice et passe son
adresse en arguments. */
void remplir_matrice(int mat[][MAT_NB_COLS], int l, int c)
{
/* -tc- validation des arguments */
if (mat != NULL && l > 0 && c > 0)
{
/* -tc- les indices de boucles peuvent être locaux a la fonction */
int i, j;
int rv;
for (i = 0; i < l; i++)
{
for (j = 0; j < c; j++)
{
/* -tc- saisie securisee d'un entier */
do
{
printf("ligne %d, colonne %d : ", i+1, j+1);
/* -tc- forcer l'affichage de l'invite avec fflush() */
fflush(stdout);
/* -tc- il est deconseille d'utiliser scanf() pour toute saisie
non formatee. Toutefois, si on desires vraiment l'utiliser,
il faut au minimum tester sa valeur de retour et faire le
menage apres utilisation. */
rv = scanf("%d", &mat[i][j]);
clean();
}
while (rv != 1);
}
}
}
}
void affiche_mat(int mat[][MAT_NB_COLS], int l, int c)
{
if (mat != NULL && l > 0 && c > 0)
{
/* -tc- ne pas definir lkes indices de boucle en global */
int i, j;
for (i = 0; i < l; i++)
{
for (j = 0; j < c; j++)
{
printf("%3d ", mat[i][j]);
}
printf("\n");
}
}
}
int main(void)
{
int mat[MAT_NB_LIGNES][MAT_NB_COLS] = {{0}};
printf("Matrice %d x %d\n", MAT_NB_LIGNES, MAT_NB_COLS);
remplir_matrice(mat, MAT_NB_LIGNES, MAT_NB_COLS);
affiche_mat(mat, MAT_NB_LIGNES, MAT_NB_COLS);
/* -tc- main() doit retourner , EXIT_SUCCESS ou EXIT_FAILURE */
return 0;
} |