Boucle folle lors de l'imbriquation de container

Boucle folle lors de l'imbriquation de container - C++ - Programmation

Marsh Posté le 11-04-2005 à 15:00:12    

je m'explique: (si vous comprenez pas, dites le moi, je m'expliquerai)
 
j'ai un vecteur dans un multiset, j'écris le multiset dans un fichier!! après je veux relire!! tout va bien sauf qu'il ne s'arrêt pas!!
 
Pourtant avant, j'écivais seulment le nom et prénom dans le fichier et cela marchait!! j'ai donc mis un délimiteur marquent la fin du vecteur (c'est le mot bidon)!!
 
mais a chaque foi qu'il arrive à la fin du fichier, il veut relire un élément suplémentaire!! mais qui est vide bien entendu!!!! alors il boucle car il trouve pas le mot bidon!!!
 
help!!
 
déclaration des fonctions
 

Code :
  1. #include <iostream>
  2. #include <set>
  3. #include <string>
  4. #include <iterator>
  5. #include <fstream>
  6. #include <algorithm>
  7. #include <vector>
  8. using namespace std;
  9. class personne
  10. {
  11. private:
  12.  string nom;
  13.  string prenom;
  14.  vector<string> tab;
  15. public:
  16. personne();
  17. personne(string,string);
  18. ~personne();
  19. string getNom() const;
  20. string getPrenom()const;
  21. void setnomprenom(string, string,vector<string> );
  22. friend ostream& operator<<(ostream&, const personne& );
  23. friend istream& operator>>(istream&, personne& );
  24. };
  25. void systempause();
  26. void systemcls();
  27. //Foncteur qui cree une fonction pour le tri
  28. struct tri{
  29. bool operator()(const personne &a,const personne &b) const
  30. {
  31.  if (a.getNom() == b.getNom())
  32.   return ( a.getPrenom() < b.getPrenom()) ;
  33.  else
  34.   return ( a.getNom() < b.getNom()) ;
  35. };
  36. };


 
 
définiton des fonctions

Code :
  1. #include "header.h"
  2. /****************************************************************
  3. *Fonction: systecls      *
  4. *****************************************************************
  5. *Description:       *
  6. * Efface l ecran      *
  7. ****************************************************************/
  8. void systemcls(){
  9. //system("clear" );
  10. system("cls" );
  11. };
  12. /****************************************************************
  13. *Fonction: systempause      *
  14. *****************************************************************
  15. *Description:       *
  16. * Fait une pause      *
  17. ****************************************************************/
  18. void systempause(){
  19. //char touche;
  20. //printf("Appuyez sur la touche enter pour continuer..." );
  21. //scanf("\n%c",&touche);
  22. system("pause" );
  23. };
  24. /****************************************************************
  25. *Fonction: client      *
  26. *****************************************************************
  27. *Description:       *
  28. * Constructeur par défaut de client   *
  29. ****************************************************************/
  30. personne::personne():nom(" " ),prenom(" " ){
  31. };
  32. /****************************************************************
  33. *Fonction: getNom      *
  34. *****************************************************************
  35. *Description:       *
  36. * Renvoi la valeur de nom     *
  37. ****************************************************************/
  38. string personne::getNom()const{
  39. return nom;
  40. };
  41. /****************************************************************
  42. *Fonction: getPrenom      *
  43. *****************************************************************
  44. *Description:       *
  45. * Renvoi la valeur de nom     *
  46. ****************************************************************/
  47. string personne::getPrenom()const{
  48. return prenom;
  49. };
  50. /****************************************************************
  51. *Fonction: operator <<      *
  52. *****************************************************************
  53. *Description:       *
  54. * Surcharge de l operateur de flux de sortie  *
  55. ****************************************************************/
  56. ostream& operator<<(ostream &os,const personne &src){
  57. cout<<"new personne"<<endl;
  58. os<<"src.getNom()<<" "<<src.getPrenom()<<" ";
  59. for(unsigned int cpt=0;cpt<src.tab.size();cpt++){
  60.  os<<src.tab[cpt]<<" ";
  61. };
  62. //marque la fin du vecteur
  63. os<<"bidon"<<endl;
  64. return os;
  65. };
  66. istream& operator>>(istream &os,personne &src){
  67. string nom1,prenom1,string_temp;
  68. vector<string> temp;
  69. int essai=0;
  70. os>>nom1;
  71. os>>prenom1;
  72. os>>string_temp;
  73. while (essai==0){
  74.  if(string_temp=="bidon" ){
  75.   essai=1;
  76.   cout<<"trouve"<<endl;
  77.  }
  78.  else {
  79.   temp.push_back(string_temp);
  80.   os>>string_temp;
  81.  };
  82. };
  83. src.setnomprenom(nom1,prenom1,temp);
  84. return os;
  85. };
  86. /****************************************************************
  87. *Fonction: ~client      *
  88. *****************************************************************
  89. *Description:       *
  90. * Constructeur surcharge de client   *
  91. ****************************************************************/
  92. personne::~personne(){
  93. };
  94. /****************************************************************
  95. *Fonction: setnomprenom      *
  96. *****************************************************************
  97. *Description:       *
  98. * Permet de creer une personne   *
  99. ****************************************************************/
  100. void personne::setnomprenom(string a, string b,vector<string> temp)
  101. {
  102. nom = a;
  103. prenom = b;
  104. this->tab = temp;
  105. };


 
[#ff0e00]main[/#ff0e00

Code :
  1. #include "header.h"
  2. int main(void)
  3. {
  4.  char choix='1';
  5.  string nom_buffer,prenom_buffer;
  6.  multiset < personne , tri > bd;
  7.  vector<string> temp1;
  8.  personne temp;
  9.  multiset < personne , tri >::iterator it;
  10. char nom_fichier[50],nom_fichier1[50];
  11. ofstream fic;
  12. ifstream fic1;
  13. //Dans qu on a pas mis quitter  
  14. do
  15. {
  16.  systemcls();
  17.  cout<<"1 =>Ajout d une personne"<<endl;
  18.  cout<<"2 =>Supprimer une personne"<<endl;
  19.  cout<<"3 =>Liste croissante"<<endl;
  20.  cout<<"4 =>Liste decroissante"<<endl<<endl<<endl;
  21.  cout<<"Q =>Pour quitte le prog"<<endl;
  22.  cout<<"Entrez votre choix: ";
  23.  cin>>choix;
  24.  switch (choix)
  25.  {
  26.   //Ajout d une personne
  27.   case '1':
  28.    cout<<"Entrez le nom: ";
  29.    cin>>nom_buffer;
  30.    cout<<"Entrez le prenom :";
  31.    cin>>prenom_buffer;
  32.    temp1.push_back("essai" );
  33.    temp1.push_back("reessai" );
  34.    temp1.push_back("rereessai" );
  35.    temp.setnomprenom(nom_buffer,prenom_buffer,temp1);
  36.    bd.insert(temp);
  37.    systempause();
  38.    break;
  39.   //Suppression d une personne
  40.   /*case '2':
  41.    cout<<endl<<endl<<"Suppression d une personne"<<endl;
  42.    cout<<"**************************"<<endl;
  43.    cout<<"Entrez le nom: ";
  44.    cin>>nom_buffer;
  45.    cout<<"Entrez le prenom :";
  46.    cin>>prenom_buffer;
  47.    temp.setnomprenom(nom_buffer,prenom_buffer);
  48.    if (!bd.erase(temp)) cout<<"-- Valeur non trouvee --";
  49.    systempause();
  50.    break;*/
  51.   //Affichage croissant
  52.   case '3':
  53.    cout<<endl<<endl<<"Liste croissante"<<endl;;
  54.    cout<<"****************"<<endl<<endl;
  55.    copy(bd.begin(),bd.end(),ostream_iterator<personne>(cout,"\n" ));
  56.    systempause();
  57.    break;
  58.   //Affichage decroissant
  59.   case '4':
  60.    cout<<endl<<endl<<"Liste decroissante"<<endl;
  61.    cout<<"******************"<<endl<<endl;
  62.    copy(bd.rbegin(),bd.rend(),ostream_iterator<personne>(cout,"\n" ));
  63.    systempause();
  64.    break;
  65.   case'5':
  66.    cout<<endl<<endl<<"Enregistrement"<<endl;
  67.    cout<<"**************"<<endl<<endl;
  68.    cout<<"Entrez le nom de fichier: "<<endl;
  69.    cin>>nom_fichier;
  70.    fic.open(nom_fichier);
  71.    if (fic!=NULL){
  72.     ostream_iterator<personne>ofi(fic, "" );
  73.     copy(bd.begin(),bd.end(), ofi);
  74.    }else cout<<"--Erreur de création--"<<endl;
  75. fic.close();
  76.    systempause();
  77.    break;
  78.   case '6':
  79.    cout<<endl<<endl<<"Restauration"<<endl;
  80.    cout<<"************"<<endl<<endl;
  81.    cout<<"Entrez le nom de fichier: "<<endl;
  82.    cin>>nom_fichier1;
  83.    ifstream File(nom_fichier1);
  84.    personne p;
  85.    copy(istream_iterator<personne>(File), istream_iterator<personne>(),inserter(bd, bd.begin()));
  86.    File.close();
  87.    systempause();
  88.    break;
  89.  }
  90. }while (choix!='q' && choix!='Q');
  91. return 0;
  92. }


Message édité par chepa_jemls le 11-04-2005 à 15:32:31
Reply

Marsh Posté le 11-04-2005 à 15:00:12   

Reply

Marsh Posté le 11-04-2005 à 16:48:01    

même si çà résoud ppas le problème fait un fic.clear(); juste après ton fic.close(); (sinon à priori la seconde fois que tu voudra liredans ce fichier il voudra pas).
Sinon pour le reste j'utilise les opérator << >> avec les ifstream et ofstream, je cnnais pas ta méthode : désolé

Reply

Marsh Posté le 11-04-2005 à 17:14:46    

http://forum.hardware.fr/hardwaref [...] 7018-1.htm


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

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