Bonjour,
Voici mon source :
#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>
#include <string.h>
#include <stdio.h>
//******************************************************************************
//******************************************************************************
struct UnMembre {
int N_IDM;
char Nom [20];
char Prenom [25];
char Adresse[30];
};
//******************************************************************************
//******************************************************************************
char* F_Base_Membres={"c:\\BaseMembres.txt"};
char* F_Compteur_Membres={"c:\\CPTM.txt"};
//******************************************************************************
//******************************************************************************
// indice du tableau de strutures membres
int indice_tableau=0;
//******************************************************************************
//******************************************************************************
// suivi du numéro ID de la structure membre
int numero_membre=999;
//******************************************************************************
//******************************************************************************
//Fonction permettant de connaitre le nombre de ligne d'un fichier
int Compter_Lignes(char* chemin)
{
ifstream fich(chemin);
// Fichier inexistant ou déplacé
if (!fich)
cout<<"fichier "<<chemin<<" introuvable"<<endl;
// Fichier existant, si le fichier est vide, cela compte 1 ligne
int NbrLignes =0;
while( !fich.eof())
{ char temp[256];
fich.getline(temp , 256, '\n');
NbrLignes++;
};
return NbrLignes;
};
//******************************************************************************
//******************************************************************************
// I) Tableau dynamique pour stocker les structures membre
// a) import de la taille du tableau depuis le fichier Base_Membre(Taille_Initial)
// à laquelle je rajoute 10 unités pour permettre la création
// nouvelle de 10 membres
//Taille_Initial_Membres = nombre d'enregistrements contenus dans le fichier
//Taille_Tous_Membres = Taille du tableau pour ranger la totalité des membres
//anciens et futurs
int Taille_Initial_Membres=Compter_Lignes(F_Base_Membres)-1;
int Taille_Tous_Membres=((Taille_Initial_Membres/4)+10) ;
UnMembre* Tableau_Tous_Membres = new UnMembre [Taille_Tous_Membres];
//******************************************************************************
//******************************************************************************
// I) import de fichier
void Import_Membres ( UnMembre tab[], int& indice, int& numero, char* chemin)
{
ifstream fich (chemin, ios::in); //ouverture du fichier
// a) Fichier inexistant ou déplacé
if (!fich)
cout<<"fichier "<<chemin<<" inexistant ou introuvable"<<endl;
int i=0;
cout<<"Taille ini : "<<Taille_Initial_Membres<<endl; //trace
while ( i<(Taille_Initial_Membres/4))
{
fich>>tab[i].N_IDM;
fich>>tab[i].Nom;
fich>>tab[i].Prenom;
/* PROBLEME */ fich>>tab[i].Adresse;
i++;
indice++;
numero++;
};
};
//******************************************************************************
//******************************************************************************
//Taille_Max==Taille_Tous_Membres,
//c'est la taille maxi du tableau de structure membre
//Denier_ID, correspond au denier Numéro ID des structures Membres utilisée,
//cela correspond donc à n_membre
UnMembre Saisir_Ajouter_M ( UnMembre& nouveau, int& indice, int Taille_Max, int& Dernier_ID )
{ while ( indice<Taille_Max )
{ Dernier_ID++;
cout<<"Nom : " ;
cin>>nouveau.Nom ;
cout<<"Prenom : " ;
cin>>nouveau.Prenom;
cout<<"Adresse : " ;
/* PROBLEME */ cin>>nouveau.Adresse;
Tableau_Tous_Membres[indice].N_IDM=Dernier_ID;
Tableau_Tous_Membres[indice].Nom=nouveau.Nom;
Tableau_Tous_Membres[indice].Prenom=nouveau.Prenom;
Tableau_Tous_Membres[indice].Adresse=nouveau.Adresse;
indice++;
cout<<"Souhaitez vous creer une autre fiche (O/N) ?";
char choix1;
cin>>choix1;
if ( choix1=='n' || choix1=='N')
break;
};
};
//******************************************************************************
//******************************************************************************
void Sauver_Membres ( UnMembre tab[], int indice, int Dernier_ID, char* chemin1, char* chemin2)
{ int i=0;
ofstream fich1;
fich1.open(chemin1, ios::out);
while ( i<indice )
{ if ( fich1.good() )
{ fich1<<tab[i].N_IDM<<endl;
fich1<<tab[i].Nom<<endl;
fich1<<tab[i].Prenom<<endl;
/* PROBLEME */ fich1<<tab[i].Adresse;
i++;
}
else
cerr<<"erreur"<<endl;
};
fich1.close();
ofstream fich2;
fich2.open(chemin2, ios::out);
if( fich2.good() )
fich2<<Dernier_ID<<endl;
else
cerr<<"erreur"<<endl;
fich2.close();
};
//trace
void afficher (UnMembre tab[], int indice)
{ for (int i=0 ; i<indice ; i++)
{ cout<<"debut"<<endl;
cout<<tab[i].N_IDM<<endl;
cout<<tab[i].Nom<<endl;
cout<<tab[i].Prenom<<endl;
cout<<tab[i].Adresse<<endl;
cout<<"fin"<<endl<<endl;
};
};
//******************************************************************************
//******************************************************************************
int main()
{
UnMembre nouveau1;
Import_Membres ( Tableau_Tous_Membres, indice_tableau, numero_membre, F_Base_Membres );
afficher (Tableau_Tous_Membres, indice_tableau);
Saisir_Ajouter_M ( nouveau1, indice_tableau, Taille_Tous_Membres, numero_membre );
afficher (Tableau_Tous_Membres, indice_tableau);
Sauver_Membres ( Tableau_Tous_Membres ,indice_tableau, numero_membre, F_Base_Membres, F_Compteur_Membres);
afficher (Tableau_Tous_Membres, indice_tableau);
system("PAUSE");
return 0;
}
Lorsque l'on exécute ce code, il y a des problème dus aux chargement de chaine de caractères comportant des espaces (xxx.getline)..., j'ai noté les champas par // PROBLEME
Si je retire ces champs mon programme fonctionne convenablement dès que je mets l'adresse avec possibilité de saisir de espaces ex. : 11 avene de la republique, cela plante...Pouvez-vous m'aidez?
code fait sous Dev-c++ 4.01
J'ai retiré tous les fich.getline ou cin.getline pour mettre a la place cin>> et fich>>...
Merci