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
#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:
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!
résultats:
int 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);
}
else
return 0;
int i,j;
mat=(int **)malloc(sizeof(int*)*taillematrice);
printf("" );
for (i=0;i<taillematrice;i++)
mat[i]=(int *)malloc(sizeof(int)*taillematrice);
for(j=0;j<taillematrice;j++)
{
for (i=0;i<taillematrice;i++)
{
fscanf(f,"%d",&mat[j][i]);
printf("%d\t",mat[j][i]);
}
}
return 1;
}
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
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.
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