Lire un fichier ,aider moi je devien fouuuuuu

Fermé
obiwone - 15 mai 2004 à 15:36
 Alex SwartzKaiser - 20 mai 2004 à 10:55
Bonjour!
Je doit lire un fichier txt qui a pour 1ere ligne un chiffre que je dois affecter a une variable,puis le nom de ville et ses coordonner.
ex:

24
marseille 85 24
nice 77 58


et pour faciliter le tout je dois le mettre dans un tableau structuriel(je croi ke sa existe te pas ce mot non??)
c a dire
(dans le .h)
typedef struct
{
double x;
double y;
char *nom[21];
}ville;


donc il faut creer un tableau de type ville qui va ranger les information du fichier dans le tableau

j ai essayer sa ,mais sa marche pas
//lecture.c

#include "lecture.h"

//ENTREE: --
//SORTIE: --
//chargement d'une ville à partir du fichier
void restaurer()
{
FILE *fichier;

int i;
ville *tmp;

tmp=(ville*)malloc(25*sizeof(ville));//affectation de place memoire pour le cas le plus grandc-a-d 25 ville

if ( (fichier = fopen("C:\carta.txt", "r")) == NULL ) //ouverture du fichier
{
printf("\nimpossible d'ouvrir le fichier %s\n\n", "c:\\carta.txt");
}

else //fichier est ouvert
{

fseek(fichier, 1, SEEK_SET); /* se repositionne a la deuxieme ligne du fichier */
do {
&tmp[i].nom = fgetc(fichier);
&tmp[i].x = fgetc(fichier);
&tmp[i].y = fgetc(fichier);/* lecture caractère par caractère du flux */
i++ ;
} while (&tmp.nom != EOF);

fclose(fichier);//fermeture du fichier
free(tmp);//on libert la memoire
}

}//fin du chargement*/

sa bug de partt help me
merci!!
A voir également:

2 réponses

Salut!

G pas de solution pour ton problème (désolé je suis pas doué en C).
Néanmoins, essaie de décrire les bugs que tu rencontres, ca peut aider (pb de memoire, ou alors les fgetc() te renvoient des mauvaises valeurs, ou encore le test de fin de boucle qui plante...), ca pourrait m'aider. Je sais pas ce que fait la fonction fgetc, si tu pouvais me le dire ca m'aiderait au niveau de l'algorythme...

Aussi, sur ton test de fin de boucle, tu dis while(tmp.nom != EOF), je sais pas si ca peut marcher comme ca, mais a priori faut au moins que tu precises tmp[i].nom, et pas tmp tout court... Et puis si tu peux avoir 25 villes, declare de la memoire pour 26, sinon ton test de fin de boucle ferait planter ton prog...
Et puis tu devrais initialiser explicitement ton i a zéro, mais ca n'engage que moi...

Voila tout, encore une fois je suis pas tres doué mais avec plus d'infos ce serait plus facile! A plus tard
0
Alex SwartzKaiser
20 mai 2004 à 10:55
Bonjour
Il ya une foule de choses qui ne vont pas du tout, et un bouquin sur le langage C répondrais a tout tes problémes... CCM contient d'ailleurs un tutorial a ce sujet.

Bon allons y
1) On dit pas "tableau structuriel" mais "tableau de structures"
On ne le crée pas comme ca
ville *tmp;
tmp=(ville*)malloc(25*sizeof(ville));


Ou comme ca si ca dépend si le nombre de ville est arbitraire
int nb_villes;
struct ville *villes_tab;

fscanf(fichier, " %d ",  &nb_villes);
villes_tab = (struct ville *)calloc(nb_villes, sizeof(struct ville *));

J'utilise un pointeur de structures... Regarde dans un cours ce que c'est.

2) Pour faire des boucles on initialise ses variables,
double x, y;
int i;

for(i = 0; i < nb_villes; i++) {
   fscanf(fichier, " %s %f  %f  ", villes_tab[i]->nom, 
                                                  &x, 
                                                  &y);

   villes_tab[i]->x = x;
   villes_tab[i]->y = y;
}


Bonne chance et surtout bonne lecture.
Hen gap lai.
0