Affichage des elements d'une matrice en C
Résolu
gahmed
-
gahmed -
gahmed -
Bonjour,
j'ai un problème avec mon programme C. Tous tournent à merveille sauf la partie affichage. Si je compile ça passe de même que si j'exécute. Le problème qu'à l'affichage le programme n'affiche quelques valeurs que j'ai eu saisies.
Voici mon code
j'ai un problème avec mon programme C. Tous tournent à merveille sauf la partie affichage. Si je compile ça passe de même que si j'exécute. Le problème qu'à l'affichage le programme n'affiche quelques valeurs que j'ai eu saisies.
Voici mon code
#include<stdio.h>
#include<stdlib.h>
//Crétion d'un nouveau type appelé matrice
typedef struct matrice{
int **el;
int n_lig;
int n_col;
}mat;
mat T;
//Fin création
int main(){
int i,j;
//Saisie de la taille de la matrice
printf("Donner le nombre de lignes :");
scanf("%d", &T.n_lig);
printf("Donner le nombre de colonnes :");
scanf("%d", &T.n_col);
//Fin saisie
//Vérification de l'allocation de la mémoire
T.el=(int**) malloc(T.n_lig*T.n_col*sizeof(int));
if (T.el == NULL)
{
printf("Memoire non allouee");
exit(0);
}
else
printf("Memoire allouee");
//Fin vérification
//Saisie de valeurs sur la matrice
for (i=0; i<T.n_lig; i++){
for (j=0; j<T.n_col; j++){
printf("\nT[%d,%d]=",i,j);
scanf("%d", &T.el[i,j]);
}
}
//Fin saisie
//Affichage des éléments de la matrice
printf("les elements de la matrice sont :");
for (i=0; i<T.n_lig; i++){
for (j=0; j<T.n_col; j++){
printf("%d ", T.el[i,j]);
}
}
//Fin affichage
getch();
return 0;
}
A voir également:
- Affichage d'une matrice en c
- Affichage double ecran - Guide
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
- Windows 11 affichage classique - Guide
- Pinterest problème affichage - Forum Réseaux sociaux
- Les images ne s'affichent plus ✓ - Forum Réseaux sociaux
2 réponses
Salut,
Comme dit loupius : T.el[i,j] ne fera pas ce que tu souhaites. Si tu veux une matrice il faut utiliser T.el[i][j].
Ensuite pour utiliser getch(), tu dois inclure conio.h ou encore mieux, utiliser getchar(); (fonction standard).
Et enfin l'erreur vient d'une mauvaise allocation mémoire.
T.el=(int**) malloc(T.n_lig*T.n_col*sizeof(int));
Tu alloues un seul tableau d'une dimension. Toi ce que tu veux, c'est un tableau 2D.
Il faudrait donc faire :
Et enfin, il ne faut surtout pas oublier de libérer les zones allouées avec free.
cdlt,
Comme dit loupius : T.el[i,j] ne fera pas ce que tu souhaites. Si tu veux une matrice il faut utiliser T.el[i][j].
Ensuite pour utiliser getch(), tu dois inclure conio.h ou encore mieux, utiliser getchar(); (fonction standard).
Et enfin l'erreur vient d'une mauvaise allocation mémoire.
T.el=(int**) malloc(T.n_lig*T.n_col*sizeof(int));
Tu alloues un seul tableau d'une dimension. Toi ce que tu veux, c'est un tableau 2D.
Il faudrait donc faire :
T.el=malloc(T.n_lig*sizeof(int));
if (T.el==NULL) {
...
}
for(i=0;i<T.n_lig;i++) {
T.el[i]=malloc(T.n_col*sizeof(int));
if (T.el[i]==NULL) {
...
}
}
Et enfin, il ne faut surtout pas oublier de libérer les zones allouées avec free.
for(i=0;i<T.n_lig;i++) {
free(T.el[i]),T.el[i]=NULL;
}
free(T.el),T.el=NULL;
cdlt,
gahmed
Merci beaucoup fiddy maintenant tous tournent à merveille