C - Problème paramètres tableau 2 dimensions
Fermé
Marie
-
6 janv. 2008 à 00:43
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 6 janv. 2008 à 16:38
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 6 janv. 2008 à 16:38
A voir également:
- C - Problème paramètres tableau 2 dimensions
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Ouvrir paramètres - Guide
- Trier 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 ;
}
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
6 janv. 2008 à 01:08
6 janv. 2008 à 01:08
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
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
6 janv. 2008 à 00:57
6 janv. 2008 à 00:57
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
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
6 janv. 2008 à 01:18
6 janv. 2008 à 01:18
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.
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
6 janv. 2008 à 05:31
6 janv. 2008 à 05:31
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
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
6 janv. 2008 à 16:38
6 janv. 2008 à 16:38
il est fait comment ton fichier texte ? tu recuperes ou le nbr de sommets ?