Se connecter avec
S'enregistrer | Connectez-vous

lecture fichier en c

Dernière réponse : dans Programmation

Voila j'ai une erreur de segmentation a l'execution avec ce code :

#include <stdio.h>
#include <stdlib.h>
#include "lecture_fichier.h"

int taillematrice;
int** mat;

void lecture_fichier(char* nom_fichier){

FILE* f=fopen(nom_fichier,"r");
if (f != NULL){
fscanf(f,"%d",&taillematrice);
printf("La matrice est de taille %d\n",taillematrice);
int i,j;
mat=(int **)malloc(sizeof(int*)*taillematrice);
printf("");
for (i=0;i<taillematrice;i++){
mat=malloc(sizeof(int)*taillematrice);
//printf("sommet %d",i);
}
printf("\n");
//Recuperation par ligne
for(j=0;j<taillematrice;j++){
for (i=0;i<taillematrice;i++){
fscanf(f,"%d",&mat[j]);
printf("%d\t",mat[j]);
}
printf("\n");
}//////////////////////////////////////////////printf("fonction lecture finie");
int n=fclose(f);
if (n!=0){printf("le fichier n'est pas fermer");}
}
else{
printf("Impossible d'ouvrir le fichier");
}
}

avec en param de cette fonction le fichier avec ceci a l'interieur

10
0 0 0 0 0 0 0 0 0 0
0 0 0 4 4 4 0 0 0 0
0 0 0 0 0 0 0 0 10 0
0 0 0 0 0 0 6 0 0 0
0 0 0 0 0 0 2 2 0 0
0 0 0 0 0 0 0 0 11 0
0 0 0 0 0 0 0 0 0 22
0 0 0 0 0 0 0 0 3 0
0 0 0 0 0 0 0 0 0 17
0 0 0 0 0 0 0 0 0 0

Merci

Autres pages sur : lecture fichier

Lassé par la pub ? Créez un compte

BOUHHHHH les variables globales !!!! :) 

résultats:
  1. int lecture_fichier(char* nom_fichier)
  2. {
  3.  
  4. FILE* f=fopen(nom_fichier,"r" );
  5. if (f != NULL)
  6. {
  7. fscanf(f,"%d",&taillematrice);
  8. printf("La matrice est de taille %d\n",taillematrice);
  9. }
  10. else
  11. return 0;
  12.  
  13. int i,j;
  14. mat=(int **)malloc(sizeof(int*)*taillematrice);
  15. printf("" );
  16. for (i=0;i<taillematrice;i++)
  17. mat[i]=(int *)malloc(sizeof(int)*taillematrice);
  18.  
  19. for(j=0;j<taillematrice;j++)
  20. {
  21. for (i=0;i<taillematrice;i++)
  22. {
  23. fscanf(f,"%d",&mat[j][i]);
  24. printf("%d\t",mat[j][i]);
  25. }
  26. }
  27. return 1;
  28. }

j'ai juste changé la ligne suivante..
mat=malloc(sizeof(int)*taillematrice);
EN:
mat=(int *)malloc(sizeof(int)*taillematrice);

pour bien initialiser en tableau de int.
apres, ton fscanf avec un %d sur un tableau (initialisé en void*) par le malloc (d'ailleurs refusé par mon compilateur sans le cast!) aura posé problème.

Résultat de l'éxecution:


[manuel@manulinux src]$ g++ fich.cpp -o fich
[manuel@manulinux src]$ ./fich
La matrice est de taille 10
0 0 0 0 0 0 0 0 0 0 00 0 4 4 4 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 00 0 0 6 0 0 0 0 0 0 00 0 2 2 0 0 0 0 0 0 00 0 0 11 0 0 0 0 0 0 00 0 0 22 0 0 0 0 0 0 00 3 0 0 0 0 0 0 0 0 00 17 0 0 0 0 0 0 0 0 00
[manuel@manulinux src]$ vi toto.txt

Ps: ne tiens pas compte de la mise en page du résultat, c'est ce foutu système qui la détraque, le resultat est conforme au programme!

je fais manger mon fils et le couche, puis je regarde.. :) 

c'est drole quand meme, ca le fait marrer (il a 7 mois) de me voir taper au clavier ... :) 

vu qu'il est court comme programme, t'a essayé de le faire fonctionner en pas à pas , pour voir où il plante ?

montre moi aussi ton main.

si tu veux/peux pas, MP le moi

j'ai fais 1 copié collé de ton source dans un fic.c,
j'ai rajouté un

int main()
{
lecture_fichier("toto.txt");
return 1;
}

puis:

[manuel@manulinux src]$ cc fic.c -o fic
[manuel@manulinux src]$ ./fic
La matrice est de taille 10

0 0 0 0 0 0 0 0 0 0
0 0 0 4 4 4 0 0 0 0
0 0 0 0 0 0 0 0 10 0
0 0 0 0 0 0 6 0 0 0
0 0 0 0 0 0 2 2 0 0
0 0 0 0 0 0 0 0 11 0
0 0 0 0 0 0 0 0 0 22
0 0 0 0 0 0 0 0 3 0
0 0 0 0 0 0 0 0 0 17
0 0 0 0 0 0 0 0 0 0
[manuel@manulinux src]$

comme tu vois, pas de problème:
1: montre moi ton main
2: montre moi tes options de configuration, voire ton makefile.


Lassé par la pub ? Créez un compte
Tom's guide dans le monde