Citation
gizida
j'essaie d'être le plus explicite possile.
J'ai un fichier texte de la forme
5
Hydrogene H 1 1.00794
Helium He 2 4.00260
Lithium Li 3 6.94100
Beryllium Be 4 9.01218
Bore B 5 10.81000
(5 c le nombre de lignes qui suivent)
pour ça , j'utilise ce programme :
void lecture(char* nomfichier,element* tableau,
int *n)
{
char nom_temp[20], sym_temp[10], lignes[200] ;
int i,longueur;
int numero; float masse;
FILE *fichier=fopen(nomfichier,"r");
if (fichier==NULL)
{printf("file not found");
exit(1);
}
fgets(lignes,60,fichier);
sscanf(lignes,"%d",n);
for (i=1;i<=longueur;i++)
{
fgets(lignes,190,fichier);
sscanf(lignes,"%s%s%d%f",nom_temp,sym_temp,&nu
mero,&masse);
tableau.nom=(char*)
malloc((strlen(nom_temp)+1)*sizeof(char));
tableau.sym=(char*)
malloc((strlen(sym_temp)+1)*sizeof(char));
if (tableau.nom==NULL ||
tableau.sym==NULL)
{printf("probleme de memoire");
exit(1);
}
strcpy(tableau.nom,nom_temp);
strcpy(tableau.sym,sym_temp);
tableau.numero=numero;
tableau.masse=masse;
}
}
le problème, c k'il me sort ke des NULL et des 0.
kelk'un voit le pb?
Hum... ton programme présente quelques erreurs
1) pourquoi tu passes "n" en paramètre à ta fonction ? Sauf si tu veux qu'au retour de ta fonction la variable qui correspond contienne la dernière valeur lue, cela n'a aucun intérêt. J'espère quand-même que, lorsque tu appelles ta fonction, tu lui passes à cet endroit une adresse !!!
2) que vaut la variable "longueur" dans "for (i=1; i <= longueur; i++)
3) en C, le premier élément d'un tableau commence toujours à "0", pas à "1"
4) tu fais des malloc dans ta boucle sans jamais conserver la valeur allouée d'une boucle sur l'autre. Au sortir de ta boucle, si tu as fait 1000 itérations, tu auras réservé 999 blocs de mémoire désormais inaccessibles et tu n'auras accès qu'au dernier bloc alloué
5) ce n'est pas la peine de faire "ligne[200]" si tu ne remplis que 190 octets à chaque fois
6) on ne sort JAMAIS d'une fonction par "exit". C'est sale. Le "exit" est réservé au "main" et éventuellement au processus fils du "fork"
7) pour mémoriser "n" lignes de 3 colonnes, il faut utiliser un tableau en 2 dimensions ou mieux, un tableau de structure
8) si ta ligne contient des mots séparés par un "espace", il faut que "sscanf" sache qu'il y a un espace => "%s %s %d" et non "%s%s%d"
9) après un "fopen" il faut faire un "fclose"
Essaye de mieux réfléchir à la manière que tu veux que ton programme travaille pour mieux réécrire ta fonction...
L'homme qui murmurait à l'oreille des pingouins
[
fr.lang.free.fr]