Gestion d'entrées/sorties sur fichier

macrow Messages postés 1 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 9 juillet 2003 - 9 juil. 2003 à 16:47
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 - 13 juil. 2003 à 21:48
Bonjour,
Voici mon source :

#include
#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> et fich>>...
Merci

1 réponse

cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
13 juil. 2003 à 21:48
Salut

1°) Pourquoi t'inclus stdio.h ?

2°) Ton identation est peu lisible. Petits conseils :
-saute plus de lignes
-rajoute des espaces
-met des tabulations
Tu feras de mes conseils ce que tu voudras mais je te les donne quand même

3°) C'est pas nécessaire de mettre un ; a la fin d'une définition de fonction

4°) J'ai tous refait les io disque en c (ça donne en plus une bonne raison d'inclure cstdio). J'ai fait quelques éssais et ça semble marcher...

A++

Chouchou182

PS: Si je me trompe, merci de me faire signe, ça peut être constructif pour moi aussi.

Voilà ma correction : (le fichiercptm.txt ne sert strictement à rien ou alors j'ai pas tout compris)

#include
#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={"BaseMembres.txt"};
char* F_Compteur_Membres={"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;

FILE* fptr ; // flux de fichier C (pas C++)

// ******************************************************************************
// ******************************************************************************
//Fonction permettant de connaitre le nombre de ligne d'un fichier

int Compter_Lignes(char* chemin) { if ( NULL (fptr fopen(chemin, "r+") ) ) {
cout << "fichier " << chemin << " introuvable\n" ;
return 0 ;
}

// Fichier existant, si le fichier est vide, cela compte 1 ligne

int NbrLignes = 0 ;
char ctmp ; // tampon pour stocker provisoirement tous les caractères du fichier

while ( !feof(fptr) ) {

fscanf(fptr, "%c", &ctmp) ;

if ( ctmp == '\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)
{
if ( NULL (fptr fopen(chemin, "r+") ) ) {
cout << "fichier " << chemin << " introuvable\n" ;
return ;
}

cout << "Taille ini : " << Taille_Initial_Membres << '\n' ;

int i ;

while ( i < (Taille_Initial_Membres / 4) ) {

fscanf(fptr, "%d %s %s", &tab[i].N_IDM, &tab[i].Nom, &tab[i].Prenom) ;

// tentative de résolution du problème
char ctmp ;
int j = 0 ;
while(true) {

fscanf(fptr, "%c", &ctmp) ;
if ( ctmp == '\n' ) break ;
tab[i].Adresse[j++] = ctmp ;

}

tab[i].Adresse[j] = '\0' ;

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 : " ;

char ctmp ;
int j = 0 ;
while(true) {

scanf("%c", &ctmp) ;
if ( ctmp == '\n' ) break ;
nouveau.Adresse[j++] = ctmp ;

}

nouveau.Adresse[j] = '\0' ;

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); if ( NULL ( fptr fopen(chemin1, "a+") ) )
return ;

for ( int i = 0 ; i < indice ; i++ ) {

fprintf(fptr, "\n%d\n%s\n%s\n", tab[i].N_IDM, tab[i].Nom, tab[i].Prenom) ;
for ( int j = 0 ; tab[i].Adresse[j] != '\0' ; j++ ) {
fprintf(fptr, "%c", tab[i].Adresse[j]) ;
}

}

//fich1.close();

fclose(fptr) ;

//ofstream fich2;
//fich2.open(chemin2, ios::out); if ( NULL ( fptr fopen(chemin2, "w+") ) )
return ;

//if( fich2.good() )
//fich2<<Dernier_ID<<endl;
//else
//cerr<<"erreur"<<endl;
fprintf(fptr, "%d\n", Dernier_ID) ;

//fich2.close();

fclose(fptr) ;

}

//trace
void afficher (UnMembre tab[], int indice)
{ for (int i=0 ; i> et fich>>...
Merci
*/
0
Rejoignez-nous