C - Problème paramètres tableau 2 dimensions
Marie
-
mype Messages postés 2449 Statut Membre -
mype Messages postés 2449 Statut Membre -
Bonjour,
Je cherche désespéremment de l'aide pour afficher un tableau à 2 dimensions ...
Je commence par le déclarer ds le main, ensuite je le remplis à partir d'un fichier (fct charge matrice), et je veux l'afficher (fct affiche matrice)
Ms je n'arrive pas à afficher le tableau ! Je pense que le problème vient de la fonction d'affichage ms je ne comprend pas pourquoi ...
Lorque j'affiche le tableau ds la fonction chargematrice (et que j'enlève affiche matrice) cela marche très bien ...
Si quelqu'un avait la solution ce serait génial ! Merci bcp !
int ChargeMatrice(FILE * fichier, int **T)
{
int nbSommets, i, j ;
/* Verifie que le fichier a bien ete ouvert */
if(fichier == NULL)
{
printf("Erreur lors de l'ouverture du fichier\n") ;
return -1;
}
/* Récupère le nombre de sommets */
fscanf(fichier, "%d\n", &nbSommets) ;
/* Reservation de la place pour le tableau
T = (int **) malloc (nbSommets * sizeof(int *)) ;
for(i=0; i<nbSommets*nbSommets; i++)
T[i] = (int *) malloc (nbSommets * sizeof(int *)) ;
/* Récupère les données à mettre ds le tableau */
for(i=0 ; i<nbSommets ; i++)
for(j=0 ; j<nbSommets ; j++)
{
fscanf(fichier, "%d ", &T[i][j]) ;
if(j == nbSommets -1)
fscanf(fichier, "\n") ;
}
fclose(fichier) ;
return 1;
}
void AfficheMatrice(int **Mat, int nbSommets)
{
int i, j ;
for(i=0 ; i<nbSommets ; i++)
{
for(j=0 ; j<nbSommets ; j++)
printf("%d ", Mat[i][j]) ;
printf("\n") ;
}
}
int main(int argc, char ** argv)
{
int **T ;
/* Ouvre le fichier qui contient les informations à mettre ds le tableau */
FILE * fichier = fopen("matrice.txt", "r") ;
ChargeMatrice(fichier, T) ;
AfficheMatrice(T, nbSommets) ;
return 0 ;
}
Je cherche désespéremment de l'aide pour afficher un tableau à 2 dimensions ...
Je commence par le déclarer ds le main, ensuite je le remplis à partir d'un fichier (fct charge matrice), et je veux l'afficher (fct affiche matrice)
Ms je n'arrive pas à afficher le tableau ! Je pense que le problème vient de la fonction d'affichage ms je ne comprend pas pourquoi ...
Lorque j'affiche le tableau ds la fonction chargematrice (et que j'enlève affiche matrice) cela marche très bien ...
Si quelqu'un avait la solution ce serait génial ! Merci bcp !
int ChargeMatrice(FILE * fichier, int **T)
{
int nbSommets, i, j ;
/* Verifie que le fichier a bien ete ouvert */
if(fichier == NULL)
{
printf("Erreur lors de l'ouverture du fichier\n") ;
return -1;
}
/* Récupère le nombre de sommets */
fscanf(fichier, "%d\n", &nbSommets) ;
/* Reservation de la place pour le tableau
T = (int **) malloc (nbSommets * sizeof(int *)) ;
for(i=0; i<nbSommets*nbSommets; i++)
T[i] = (int *) malloc (nbSommets * sizeof(int *)) ;
/* Récupère les données à mettre ds le tableau */
for(i=0 ; i<nbSommets ; i++)
for(j=0 ; j<nbSommets ; j++)
{
fscanf(fichier, "%d ", &T[i][j]) ;
if(j == nbSommets -1)
fscanf(fichier, "\n") ;
}
fclose(fichier) ;
return 1;
}
void AfficheMatrice(int **Mat, int nbSommets)
{
int i, j ;
for(i=0 ; i<nbSommets ; i++)
{
for(j=0 ; j<nbSommets ; j++)
printf("%d ", Mat[i][j]) ;
printf("\n") ;
}
}
int main(int argc, char ** argv)
{
int **T ;
/* Ouvre le fichier qui contient les informations à mettre ds le tableau */
FILE * fichier = fopen("matrice.txt", "r") ;
ChargeMatrice(fichier, T) ;
AfficheMatrice(T, nbSommets) ;
return 0 ;
}
A voir également:
- C - Problème paramètres tableau 2 dimensions
- Tableau word - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Parametres de mon ordinateur - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
9 réponses
Désolée, j'ai voulu enlever quelques trucs pr que cela paraisse plus clair, mais j'en ai enlevé trop ...
int ChargeMatrice(FILE * fichier, int **T)
{
int nbSommets, i, j ;
/* Verifie que le fichier a bien ete ouvert */
if(fichier == NULL)
{
printf("Erreur lors de l'ouverture du fichier\n") ;
return -1;
}
/* Récupère le nombre de sommets */
fscanf(fichier, "%d\n", &nbSommets) ;
/* Reservation de la place pour le tableau
T = (int **) malloc (nbSommets * sizeof(int *)) ;
for(i=0; i<nbSommets*nbSommets; i++)
T[i] = (int *) malloc (nbSommets * sizeof(int *)) ;
/* Récupère les données à mettre ds le tableau */
for(i=0 ; i<nbSommets ; i++)
for(j=0 ; j<nbSommets ; j++)
{
fscanf(fichier, "%d ", &T[i][j]) ;
if(j == nbSommets -1)
fscanf(fichier, "\n") ;
}
fclose(fichier) ;
return 1;
}
void AfficheMatrice(int **Mat, int nbSommets)
{
int i, j ;
for(i=0 ; i<nbSommets ; i++)
{
for(j=0 ; j<nbSommets ; j++)
printf("%d ", Mat[i][j]) ;
printf("\n") ;
}
}
int main(int argc, char ** argv)
{
int **T ;
int nbSommets ;
/* Ouvre le fichier qui contient les informations à mettre ds le tableau */
FILE * fichier = fopen("matrice.txt", "r") ;
nbSommets = ChargeMatrice(fichier, T) ;
if(nbSommets == -1)
exit(0) ;
AfficheMatrice(T, nbSommets) ;
return 0 ;
}
int ChargeMatrice(FILE * fichier, int **T)
{
int nbSommets, i, j ;
/* Verifie que le fichier a bien ete ouvert */
if(fichier == NULL)
{
printf("Erreur lors de l'ouverture du fichier\n") ;
return -1;
}
/* Récupère le nombre de sommets */
fscanf(fichier, "%d\n", &nbSommets) ;
/* Reservation de la place pour le tableau
T = (int **) malloc (nbSommets * sizeof(int *)) ;
for(i=0; i<nbSommets*nbSommets; i++)
T[i] = (int *) malloc (nbSommets * sizeof(int *)) ;
/* Récupère les données à mettre ds le tableau */
for(i=0 ; i<nbSommets ; i++)
for(j=0 ; j<nbSommets ; j++)
{
fscanf(fichier, "%d ", &T[i][j]) ;
if(j == nbSommets -1)
fscanf(fichier, "\n") ;
}
fclose(fichier) ;
return 1;
}
void AfficheMatrice(int **Mat, int nbSommets)
{
int i, j ;
for(i=0 ; i<nbSommets ; i++)
{
for(j=0 ; j<nbSommets ; j++)
printf("%d ", Mat[i][j]) ;
printf("\n") ;
}
}
int main(int argc, char ** argv)
{
int **T ;
int nbSommets ;
/* Ouvre le fichier qui contient les informations à mettre ds le tableau */
FILE * fichier = fopen("matrice.txt", "r") ;
nbSommets = ChargeMatrice(fichier, T) ;
if(nbSommets == -1)
exit(0) ;
AfficheMatrice(T, nbSommets) ;
return 0 ;
}
nbSommets = ChargeMatrice(fichier, T) ;
la tu donne a nbSommets la valeur 1 c'est normal apres que ta fonction AfficheMatrice ne marche pa
la tu donne a nbSommets la valeur 1 c'est normal apres que ta fonction AfficheMatrice ne marche pa
dans ta fonction affichematrice tu as nbSommets en parametre alor qu'il n'est pas declaré dans le main...
Oups j'avais oublié ca aussi ... :S
J'ai remplacé ds Chargematrice le return 1 par return nbSommets, et ca ne marche pas non plus !
J'ai remplacé ds Chargematrice le return 1 par return nbSommets, et ca ne marche pas non plus !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tu peux nous dire ce qui ne marche pas ?
erreur de compilation ? si oui... le message d'erreur et a quel niveau ?
erreur d'execution ?
le programme ne fait pas ce que tu veux il n'affiche pas de matrice ?
erreur de compilation ? si oui... le message d'erreur et a quel niveau ?
erreur d'execution ?
le programme ne fait pas ce que tu veux il n'affiche pas de matrice ?
Je travaille sous dev c++.
Quand j'enlève l'appel à affichematrice, le "terminal" s'ouvre et affiche "appuyez sur une touche pour continuer" ce qui est normal.
Quand je le remet, le terminal s'ouvre et se referme tout de suite. (j'ai essayé sous linux, cela met une erreur de seg)
J'ai enlevé la fonction AfficheMatrice, et j'ai mis les 2boucles for ds la fonction chargematrice (pour que l'affichage se fasse dedans), et la ca affichait bien.
Quand j'enlève l'appel à affichematrice, le "terminal" s'ouvre et affiche "appuyez sur une touche pour continuer" ce qui est normal.
Quand je le remet, le terminal s'ouvre et se referme tout de suite. (j'ai essayé sous linux, cela met une erreur de seg)
J'ai enlevé la fonction AfficheMatrice, et j'ai mis les 2boucles for ds la fonction chargematrice (pour que l'affichage se fasse dedans), et la ca affichait bien.
le probleme c'est que tu fabrique ta matrice dans Chargematrice mais tu donne une autre matrice non allouee a afichematrice donc ça segfault...
tu pourrais recuperer ta matrice a partir de Chargematrice comme ça tu pourrais passer en parametre a affichematrice la bonne matrice et recupere le nombre de sommet dans le main
essaye ça
tu pourrais recuperer ta matrice a partir de Chargematrice comme ça tu pourrais passer en parametre a affichematrice la bonne matrice et recupere le nombre de sommet dans le main
essaye ça
int **ChargeMatrice(FILE * fichier, int **T,int nbSommets)
{
int i, j ;
/* Verifie que le fichier a bien ete ouvert */
if(fichier == NULL)
{
printf("Erreur lors de l'ouverture du fichier\n") ;
return -1;
}
/* Reservation de la place pour le tableau*/
T = (int **) malloc (nbSommets * sizeof(int *)) ;
for(i=0; i<nbSommets; i++)
T[i] = (int *) malloc (nbSommets * sizeof(int)) ;
/* Récupère les données à mettre ds le tableau */
for(i=0 ; i<nbSommets ; i++)
for(j=0 ; j<nbSommets ; j++)
{
fscanf(fichier, "%d",&T[i][j]) ;
}
fclose(fichier) ;
return T;
}
void AfficheMatrice(int **Mat, int nbSommets)
{
int i, j ;
for(i=0 ; i<nbSommets ; i++)
{
for(j=0 ; j<nbSommets ; j++)
printf("%d ",Mat[i][j]) ;
printf("\n") ;
}
}
int main(int argc, char ** argv)
{
int **T ;
int nbSommets ;
/* Ouvre le fichier qui contient les informations à mettre ds le tableau */
FILE * fichier = fopen("matrice.txt", "r") ;
fscanf(fichier, "%d", &nbSommets) ;
T=ChargeMatrice(fichier,T,nbSommets) ;
if(nbSommets == -1)
exit(0) ;
AfficheMatrice(T, nbSommets) ;
return 0 ;
}
Je te remercie, j'ai essayé ce que tu m'as dit, ca ne fait plus d'erreur de seg, mais au lieu d'afficher ca :
0 1 0 0 1 0 0
1 0 1 0 0 0 0
0 1 0 1 0 3 0
0 0 1 0 0 0 10
1 0 0 0 0 10 0
0 0 10 0 5 0 5
0 0 0 5 0 3 0
ca me met ca :
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
0 1 0 0 1 0 0
1 0 1 0 0 0 0
0 1 0 1 0 3 0
0 0 1 0 0 0 10
1 0 0 0 0 10 0
0 0 10 0 5 0 5
0 0 0 5 0 3 0
ca me met ca :
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0
4063608 4063608 0 0 0 0 0