Aide ecriture fichier

Aide ecriture fichier - C++ - Programmation

Marsh Posté le 25-05-2003 à 19:18:13    

Je cherche a sauvegarder dans un fichier un arbre AVL dans un fichier.
Chaque noeud a la structure suivante :  
 

Code :
  1. typedef struct infoVol * ptr_infoVol;
  2. typedef struct infoVol
  3. {
  4. char numero[20];
  5. char distance;
  6. ptr_listePassager jour[31];
  7. } infoVol;


 
 
Pour sauvegarder cet arbre, g pris l'alogo du parcours en largeur d'un arbre et au lieu d'afficher a l'ecran j'ecris le noued ds un fichiers :
 

Code :
  1. void sauvegardeArbre(ptr_arbreAVL a, FILE* fichier)
  2.   {
  3.   file f;
  4.   char chaine[1];
  5. ptr_arbreAVL tmp;
  6. tmp = (ptr_arbreAVL) malloc( sizeof(arbreAVL) );
  7. f.fin = NULL;
  8. f.debut = NULL;
  9. f.nb_elt = 0;
  10. enfile (&f, a);
  11. while (f.debut != NULL)
  12. {
  13.  defile(&f, &tmp);
  14.  printf("%d ",tmp->Vol.distance);
  15.  strncpy (chaine, &tmp->Vol.distance,1);
  16.  strncat (chaine, "\0", 2);
  17.  fputs (chaine, fichier);
  18.  fputs ("\n", fichier);
  19.  //fwrite ( &tmp->Vol.distance, sizeof(tmp->Vol.distance), 1, fichier);
  20.  if (tmp->sag != NULL)
  21.  {
  22.   enfile (&f, tmp->sag);
  23.  }
  24.  if (tmp->sad != NULL)
  25.  {
  26.   enfile (&f, tmp->sad);
  27.  }
  28. }
  29.   }


 
Seulement le fichier contient des caracteres bizar !!
 

Citation :

ÌÌÌ
ÌÌÌÀC
 ÌÌÌ0
 
 
ÌÌÌðC
ÌÌÌ
ÌÌÌ


 
je n'arrive pas a avoir ds le fichier une liste de mes noeuds, du type  

Citation :

5
6
4
12
3


 
Quelqu'n peut il m'aide
 
Merci

Reply

Marsh Posté le 25-05-2003 à 19:18:13   

Reply

Marsh Posté le 25-05-2003 à 19:25:34    

si tu arrives à avoir tes infos à l'écran, il te suffit de remplacer tes printf par des frpintf(fichier, ./..) et tes puts par des fputs

Reply

Marsh Posté le 25-05-2003 à 19:26:20    

strncpy (chaine, &tmp->Vol.distance,1);
        strncat (chaine, "\0", 2);
 
c'est pas un peu enorme pour copier un simple char?

Reply

Marsh Posté le 25-05-2003 à 19:32:33    

c ca mon probleme j'arrive a afficher tt mes noeuds a l'ecran mais pas les inscrire ds le fichier

Reply

Marsh Posté le 25-05-2003 à 19:33:57    

ben fwreite c'est les e/s binaires, fprintf/fputs les entrées sortie texte formatées

Reply

Marsh Posté le 25-05-2003 à 20:01:37    

g tout essayer et rien ne marche sauf si j'ecris fputs ("6", fichier);

Reply

Marsh Posté le 25-05-2003 à 20:14:53    

si tu fais des frpintf et fputs et que le ficheir est illisible, c'est que le problème vient de tes données

Reply

Marsh Posté le 25-05-2003 à 20:22:53    

c ce que je pense aussi mais elle s'affiche bien a la ligne precedentes ! il y a un probleme je pense avec  

Code :
  1. strncpy (chaine, &tmp->Vol.distance,1);

Reply

Marsh Posté le 25-05-2003 à 20:29:35    

voir mon post précédent
 
utlise fprintf comme si tu utilises printf

Reply

Marsh Posté le 25-05-2003 à 20:41:35    

c pareil ca fait des choses bizar !

Reply

Marsh Posté le 25-05-2003 à 20:41:35   

Reply

Marsh Posté le 25-05-2003 à 20:43:53    

ah ben ok. tu utilies un char pour stocker du numérique et pas de l'ascii, donc tu imprimes le caractere de code ascii de valeur ton char
 
bref utilises fprintf

Reply

Marsh Posté le 25-05-2003 à 21:30:38    

g donc fait ceci
 

Code :
  1. strncpy (chaine, &tmp->Vol.distance,1);
  2.  //strncat (chaine, "\0", 2);
  3.  chaine[0] = chaine[0]+48;
  4.  fprintf (fichier, chaine);


 
il me rentre alors ds le fichier
 

Citation :

2ÌÌÌ
1ÌÌÌÀC
<ÌÌÌ0
0ÌÌÌÀC
:ÌÌÌðC
?ÌÌÌ
@ÌÌÌ


 
au lieu de
 

Citation :


2
1
0
12
10
15
16

Reply

Marsh Posté le 25-05-2003 à 21:32:26    

putain, te syeux et ton cerveau tu t'en sers?
 
comme dis des mon premeir post
 
printf("%d ",tmp->Vol.distance);
|
v
fprintf(fichier, "%d ",tmp->Vol.distance);

Reply

Marsh Posté le 25-05-2003 à 21:35:08    

Nickel merci !
 
desoler de t'avoir enerver mais g regarder la definition de fprintf ds la msdn et je savais pas que je pouvais mettre un format --> %d

Reply

Marsh Posté le 25-05-2003 à 21:37:04    

ben pour ton information, printf est un alias à fprintf(stdout

Reply

Sujets relatifs:

Leave a Replay

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