pb d'écriture récursive dans un fichier

pb d'écriture récursive dans un fichier - C++ - Programmation

Marsh Posté le 09-03-2005 à 10:35:01    

j'utilise une fonction récursive pour écrire dans un fichier et j'ai un petit pb :
voici mon prog:
 

Code :
  1. void ThreatNode::Tree2IF(){
  2. char str[1000];
  3. FILE *stream;
  4. SonContainer *a_node_container;
  5. ThreatNode *a_node;
  6. if( (stream = fopen("H:\\CPP\\test\\test6\\prunning_tree.tree", "a" )) != NULL ){
  7. strcpy(str, this->getName());
  8.  fprintf(stream,"[\n" );
  9.  cout<< "[\n";
  10. for(int i=0;i<strlen(str);i++){
  11.  fprintf(stream,"%c",str[i]);
  12.  cout<< str[i];
  13. }//fin for
  14. fprintf(stream,";" );
  15. cout << ";\n";
  16.  a_node_container = this->son;
  17. while (a_node_container != NULL) {
  18.  a_node = a_node_container->a_node;
  19.  a_node->Tree2IF();
  20.  a_node_container = a_node_container->next;
  21. }
  22. fprintf(stream,"]\n" );
  23. cout<< "]\n";
  24. }//fin if
  25. fclose(stream);
  26. }


 
 
dnas mon fichier je trouve ça:
 

Code :
  1. [
  2. ouvrir_sur_place;]
  3. [
  4. en_cherchant;]
  5. [
  6. en_interrogeant;]
  7. [
  8. trouver_salle;]
  9. [
  10. percer;]
  11. [
  12. en_cherchant;]
  13. [
  14. en_interrogeant;]
  15. [
  16. trouver_salle;]
  17. [
  18. avec_combinaison;]
  19. [
  20. ouvrir_sur_place;]


 
 
or je vourdrait avoir avec que mes cout m'affichent à l'écran cad:
 

Code :
  1. [
  2. ouvrir_sur_place;
  3. [
  4. percer;
  5. [
  6. trouver_salle;
  7. [
  8. en_cherchant;
  9. ]
  10. [
  11. en_interrogeant;
  12. ]
  13. ]
  14. ]
  15. [
  16. avec_combinaison;
  17. [
  18. trouver_salle;
  19. [
  20. en_cherchant;
  21. ]
  22. [
  23. en_interrogeant;
  24. ]
  25. ]
  26. ]
  27. ]


 
 
 
je vois pas trop pourquoi , si quelqu'un avait une idée.

Reply

Marsh Posté le 09-03-2005 à 10:35:01   

Reply

Marsh Posté le 09-03-2005 à 10:57:18    

Je sais pas, mais un petit conseil : demande plutot à recevoir un FILE* en paramètre de Tree2IF et file lui récursivement le pointeur de fichier (que tu auras créé dans ton main).
De plus, tu mélanges C et C++ (cout, fopen...). Utilise std::ofstream + std::string plutot, ainsi tu pourras enlever ton vilain char str[1000]; qui te causera que des problèmes (sécurité, dépassement de pile en récursif, ...).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 09-03-2005 à 11:11:38    

HelloWorld a écrit :

Je sais pas, mais un petit conseil : demande plutot à recevoir un FILE* en paramètre de Tree2IF et file lui récursivement le pointeur de fichier (que tu auras créé dans ton main).
De plus, tu mélanges C et C++ (cout, fopen...). Utilise std::ofstream + std::string plutot, ainsi tu pourras enlever ton vilain char str[1000]; qui te causera que des problèmes (sécurité, dépassement de pile en récursif, ...).


 
 
 
Merci du conseil mais finalement j'ai trouvé je rajoute un fflush(stream).  
Par contre je vois pas trop pourquoi ça fonctionne avec fflush.

Reply

Marsh Posté le 09-03-2005 à 11:13:27    

oh du C !

Reply

Marsh Posté le 09-03-2005 à 11:46:08    

Parce que t'as plusieurs FILE* d'ouverts simultanément, et y'a du buffering etc...
C'est franchement plus propre de filer un seul et même FILE* à tout le monde (paramètre de ta fonction).
Test ta fonction sur un gros arbre, y'a au moins 2 problèmes en perspective (en plus de celui des performances) : limitation du nombre de handle, dépassement de pile avec ton char str[1000];.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

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