Double lecture avec fscanf

Double lecture avec fscanf - C - Programmation

Marsh Posté le 20-10-2005 à 21:52:13    

Salut à tous,
Je dispose d'un fichier dont le format est le suivant :  
 
---------------------------
BERNE Rodolphe
1976
14, Concierge
73, Savoie
GAILLOT Marc
1974
45, Secretaire
68, Haut-Rhin
...
---------------------------
 
 
A partir de ce fichier, je dois extraire les informations suivantes, que j'ajoute a une liste :
BERNE Rodolphe, 1976, 14, 73
GAILLOT Marc, 1974, 45, 68
...
 
(",Concierge" et ", Savoie" sont ignorés)
 
Donc voici comment se présente mon code :
 

Code :
  1. while(!feof(pt_fic)) {
  2. fscanf(pt_fic, "%[^\\n]s", une_identite);
  3. fscanf(pt_fic, "%d", &une_annee);
  4. fscanf(pt_fic, "%d %[^\\n]s", &une_profession, ligne_suite);
  5. fscanf(pt_fic, "%d %[^\\n]s", &un_departement, ligne_suite);
  6. InsertionNoeud(ma_liste, NouveauNoeud(une_identite, une_profession, une_annee, un_departement));
  7. }


 
Description des variables :  
une_identite : tableau de caractère (contient nom+prenom)
une_annee, une_profession, un_departement : entiers
ligne_suite : suite de la ligne dont je ne me préoccupe pas (contient par exemple ", Concierge", ", Savoie" ...)
 
 
Le problème est qu'au final, j'obtiens la liste voulue mais avec tous les éléments en DOUBLE.
Exemple de liste obtenue :
 
---------------------------
BERNE Rodolphe, 1976, 14, 73
BERNE Rodolphe, 1976, 14, 73
GAILLOT Marc, 1974, 45, 68
GAILLOT Marc, 1974, 45, 68
...
---------------------------
 
Ceci signifie qu'au premier bouclage, la fonction lit les 4 premières lignes et insère l'élément.
Au deuxième bouclage, la fonction RE-LIT les 4 mêmes lignes et insère l'élément !
et ce, jusqu'à la fin du fichier...
 
Je ne comprends pas pourquoi le pointeur reste toujours sur la même ligne la 2e fois, alors qu'il devrait avancer 4 par 4.
 
Voila voila :/
 
Merci d'avance pour votre aide !  :jap:  
 
 
Jon

Message cité 1 fois
Message édité par jon301 le 20-10-2005 à 22:55:00
Reply

Marsh Posté le 20-10-2005 à 21:52:13   

Reply

Marsh Posté le 20-10-2005 à 22:54:54    

jon301 a écrit :


Code :
  1. while(!feof(pt_fic)) {
  2. fscanf(pt_fic, "%[^\n]s", une_identite);
  3. fscanf(pt_fic, "%d", &une_annee);
  4. fscanf(pt_fic, "%d %[^\n]s", &une_profession, ligne_suite);
  5. fscanf(pt_fic, "%d %[^\n]s", &un_departement, ligne_suite);
  6. InsertionNoeud(ma_liste, NouveauNoeud(une_identite, une_profession, une_annee, un_departement));
  7. }




feof() ne fait pas ce que tu crois.
 
http://mapage.noos.fr/emdel/notes.htm#fichiers
 
Sinon, je recommande fgets() puis sscanf()...

Citation :


Description des variables :  
une_identite : tableau de caractère (contient nom+prenom)
une_annee, une_profession, un_departement : entiers
ligne_suite : suite de la ligne dont je ne me préoccupe pas (contient par exemple ", Concierge", ", Savoie" ...)
 
 
Le problème est qu'au final, j'obtiens la liste voulue mais avec tous les éléments en DOUBLE.
Exemple de liste obtenue :
 
---------------------------
BERNE Rodolphe, 1976, 14, 73
BERNE Rodolphe, 1976, 14, 73
GAILLOT Marc, 1974, 45, 68
GAILLOT Marc, 1974, 45, 68
...


Données insuffisantes. Poste une version minimale mais complète et compilable qui montre le défaut.


Message édité par Emmanuel Delahaye le 20-10-2005 à 22:55:15

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed