Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1280 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Bug dans mon prog d ou cela pourrait venir ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Bug dans mon prog d ou cela pourrait venir ?

n°694331
xiluoc
un pc pour les unirs ....
Posté le 07-04-2004 à 01:16:57  profilanswer
 

:hello: ,
alors voila le pb,
mon programme ouvre un fichier, le lis fait des trucs (ici inserer les chiffres du fichiers dans un binary search tree) ferme le fichier.
et renvoie au menu.

Code :
  1. menu
  2. 1. create a binary search tree //a partir d un fichier
  3. 2. Draw tree //de haut en bas
  4. 3. balance tree
  5. 4. save tree //dans un fichier en preorder
  6. 5. quit


 
le point 1 marche au premier lancement mais si une fois retorner au menu je veus creer un autre arbre binaire avec un fichier different (ec : in1.txt) il me dit fichier introuvalbe.. alors que si je ferme le prog et le relance la sa marhce.
 
j aipense a un close oublier masi apperement non..
 
voila le code :

Code :
  1. case 1 : {
  2.             string in;
  3.             cout << "Please enter name of data file "<<endl;
  4.             cin >> in;
  5.             infile.open(in.c_str());
  6.             if (infile.fail())
  7.             {
  8.                   cerr << "Cannot find " << in.c_str() << "\n";
  9.                   //cin.clear();
  10.                   break;
  11.             }
  12.             int element;
  13.             while(infile >> element)
  14.             {
  15.                 mytree.insert(element);
  16.             }
  17.             infile.close();
  18.             break;
  19.             }


 
une idee ?  :)  
 

mood
Publicité
Posté le 07-04-2004 à 01:16:57  profilanswer
 

n°694333
Taz
bisounours-codeur
Posté le 07-04-2004 à 01:21:13  profilanswer
 

et il est défini ou ton infile ? faut peut être lui refaire sa fête pour tout nettoyer :o

n°694336
xiluoc
un pc pour les unirs ....
Posté le 07-04-2004 à 01:40:33  profilanswer
 

ah we ca marche mieux tout d un coup :)
bon il me reste a detruire lancien arbre avant de rajouter les donnes du nouveau.
 
merci !

n°694350
xiluoc
un pc pour les unirs ....
Posté le 07-04-2004 à 02:48:29  profilanswer
 

j ai un autre problem en rapport avec les objets   [:dams86]
 
l objet btree mytree est cree au tout debut du main.
ensuite si l option est "2" il lance mytree.print()
si c est "1" mytree.insert()  
ect..
 
Maintenant une fois l arbre creer et que je retourne sue l option 1
il me faut repartir a zero et soit, detruire toutes les nodes de mytree soit creer un nouvel objet mytree.
 
ma fonction des ~btree

Code :
  1. btree::~btree() {    destroyTree(root); }
  2. void btree::destroyTree(tree t)
  3. {
  4.   if(t!=NULL )
  5.   {
  6.     destroyTree(t->left);
  7.     destroyTree(t->right);
  8.     cout << "t-> data : " << t->data << " deleted ! " << endl;
  9.     delete t;
  10.   }
  11. }


 
mais le problem c est que sa plante dans un cas particulier :
si mon fichier in1 est plus petit en nombre d element que in2.
in1 < in2 < in3 ... la nouvel insertion se passe bien.
sinon (in1 > in2) sa plante a linsertion.
et je narrive pas a voir pourquoi.
 
donc le mieux je pense serait de creer un nouvel objet a chauqe insertion, mais la il y a un pb c est que comment pouraije faire pour les fonction mytree.print() mytree.save() ? car elles on besoin de savoir ce qu est mytree avant l insertion.  
 
exemple :

Code :
  1. switch (choice)
  2.    {
  3.       case 1 : {
  4.             string in;
  5.             ifstream infile;
  6.             cout << "Please enter name of data file "<<endl;
  7.             cin >> in;
  8.             infile.open(in.c_str());
  9.             if (infile.fail())
  10.             {
  11.                   cerr << "Cannot find " << in.c_str() << "\n";
  12.                   cin.clear();
  13.                   break;
  14.             }
  15.             int element;
  16.           mytree.~btree();
  17.             while(infile >> element)
  18.             {
  19.                    mytree.insert(element);
  20.             }
  21.             infile.close();
  22.             break;
  23.             }
  24.      
  25.        case 2 : {
  26.             mytree.printUpRight();
  27.             break;
  28.             }
  29.                              
  30.        case 4 : {
  31.             string out;
  32.             cout << "Please enter name of output file "<<endl;
  33.             cin >> out;
  34.             mytree.writePreOrder(out);
  35.             break;
  36.        }
  37.        case 5 : return 0; break; //destroy tree
  38.    }
  39.   }


 
la fonction insert

Code :
  1. void btree::insert(int data) {insertSlave(data, root);}
  2. void btree::insertSlave(int data, tree& t) {
  3.     if (t == NULL) {
  4.     t = new node;
  5.     t->left = NULL;
  6.     t->right = NULL;
  7.     t->data = data;
  8.     }
  9.     else  {
  10.     if (data < t->data) insertSlave (data, t->left);
  11.     else if (data > t->data) insertSlave  (data, t->right);
  12.     else cerr << "element already in place" << endl;
  13.     }
  14. }


 
une histoire de pointeur ? :sweat:

n°694356
Taz
bisounours-codeur
Posté le 07-04-2004 à 03:15:38  profilanswer
 

c'est quoi ces conneries d'appeler le destructeur ? soit tu fais un membre clear() soit un objet local.
 
utilises un debugger

n°694375
xiluoc
un pc pour les unirs ....
Posté le 07-04-2004 à 04:06:22  profilanswer
 

Taz a écrit :

c'est quoi ces conneries d'appeler le destructeur ? soit tu fais un membre clear() soit un objet local.
 
utilises un debugger


 [:alarmclock119]  

Code :
  1. void btree::clear() {
  2. if (root==NULL) {
  3.     cout << "root null " << endl;
  4.     return;
  5.     }
  6. _clear(root);
  7. root=NULL;
  8. }
  9. void btree::_clear(tree t) {
  10.   if(t!=NULL )
  11.   {
  12.     _clear(t->left);
  13.     _clear(t->right);
  14.     cout << "t-> data : " << t->data << " deleted ! " << endl;
  15.     delete t;
  16.     }
  17. }


ca marhce weeeeee  :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Bug dans mon prog d ou cela pourrait venir ?

 

Sujets relatifs
[VBA - Powerpoint] Association Macro foireuse ou bug de pwpt ??Prog système sous Linux
desinstaller prog batchautomatiser un prog sous sos
un mini-prog qui ouvre 2 applisHFR Prog rencontre 2004 : Lieu de rendez vous! Votez!
HFR Prog rencontre 2004 : the final loose[batch] J'ai un prog en vbs que j'aimerais convertir en batch...
prog php : script commentairepb pour compiler un prog
Plus de sujets relatifs à : Bug dans mon prog d ou cela pourrait venir ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR