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

  FORUM HardWare.fr
  Programmation
  C++

  Boucle folle lors de l'imbriquation de container

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Boucle folle lors de l'imbriquation de container

n°1043019
chepa_jeml​s
Posté le 11-04-2005 à 15:00:12  profilanswer
 

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
mood
Publicité
Posté le 11-04-2005 à 15:00:12  profilanswer
 

n°1043197
LordHarryP​otter
Posté le 11-04-2005 à 16:48:01  profilanswer
 

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é

n°1043234
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-04-2005 à 17:14:46  profilanswer
 

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


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

Aller à :
  FORUM HardWare.fr
  Programmation
  C++

  Boucle folle lors de l'imbriquation de container

 

Sujets relatifs
Boucle whileBoucle sans fin en Batch
VBA - Forcer la boucleUrl Rewriting : boucle ?
macro boucleBOUCLE
Problème sur une bouclemacro excel boucle sur les colonnes
Déefinir le temps d'éxécution d'une boucleAcceder à pls variables via boucle
Plus de sujets relatifs à : Boucle folle lors de l'imbriquation de container


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