FICHIER EN C
THEMAHG
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
bonjour!
j'ai un problème avec mon programme, après la saisie des enregistrements, j'écrit sur le fichier, mais le problème et que quan j'affiche , je n vois que le dernier entrer. regarder une partie du code si dessous:
int encod_memb(FILE *fm,membre* pmemb,int nmemb)
{
long tmp=0,tab[50];
char touche[5],choiSex;
int retour,verifNum=0,i=0,n,boole=0;
fflush(stdin);
nmemb++;
printf("\n\tENCODER LE MEMBRE No %d",nmemb);
printf("\n\t_____________________\n");
fm=fopen("c:Mon fichier.dat","rb");
do
{
printf("Encoder le No de Licence (compris entre 1000 et 10.000) :");
fflush(stdin);
gets(touche);
tmp=atol(touche);
tab[nmemb-1]=tmp;// sauver le num dans un tableau
//verifNum=CheckNum(tmp,tab,nmemb);
if(tmp>1000 && tmp<10000)
{
boole=1;
}
else
{
boole=0;
}
}
while( verifNum==1);
if(boole==1)
{
pmemb->NumLicence=tmp;//atol(touche);
boole=1;
printf("Entrez le nom : ");
fflush(stdin);
gets(pmemb->nom);
printf("Entrez le prenom : ");
fflush(stdin);
gets(pmemb->prenom);
printf("Entrez le jour de la Date de Naissance : ");
fflush(stdin);
scanf("%d",&n);
pmemb->DateNaissance.Jour=n;
printf("Entrez le Mois de la Date de Naissance : ");
fflush(stdin);
scanf("%d",&n);
pmemb->DateNaissance.Mois=n;
printf("Entrez l'annee de la Date de Naissance : ");
fflush(stdin);
scanf("%d",&n);
pmemb->DateNaissance.Annee=n;
//CHOIX DU SEXE
printf("Choisissez le sexe : (M ou F)");
do
{
choiSex=toupper(getch());
}
while(choiSex!='M' && choiSex!='F' );
pmemb->Sexe=choiSex;
}
fwrite(pmemb,sizeof(membre),1,fm);
fseek(fm,(nmemb-1*sizeof(membre)),SEEK_END);
// booleen retourné pour verifier l'etat de l'encodge
if(boole==1)
{
retour=1;
}
else
{
retour=0;
}
//fclose(fm);
return retour;
}
j'ai un problème avec mon programme, après la saisie des enregistrements, j'écrit sur le fichier, mais le problème et que quan j'affiche , je n vois que le dernier entrer. regarder une partie du code si dessous:
int encod_memb(FILE *fm,membre* pmemb,int nmemb)
{
long tmp=0,tab[50];
char touche[5],choiSex;
int retour,verifNum=0,i=0,n,boole=0;
fflush(stdin);
nmemb++;
printf("\n\tENCODER LE MEMBRE No %d",nmemb);
printf("\n\t_____________________\n");
fm=fopen("c:Mon fichier.dat","rb");
do
{
printf("Encoder le No de Licence (compris entre 1000 et 10.000) :");
fflush(stdin);
gets(touche);
tmp=atol(touche);
tab[nmemb-1]=tmp;// sauver le num dans un tableau
//verifNum=CheckNum(tmp,tab,nmemb);
if(tmp>1000 && tmp<10000)
{
boole=1;
}
else
{
boole=0;
}
}
while( verifNum==1);
if(boole==1)
{
pmemb->NumLicence=tmp;//atol(touche);
boole=1;
printf("Entrez le nom : ");
fflush(stdin);
gets(pmemb->nom);
printf("Entrez le prenom : ");
fflush(stdin);
gets(pmemb->prenom);
printf("Entrez le jour de la Date de Naissance : ");
fflush(stdin);
scanf("%d",&n);
pmemb->DateNaissance.Jour=n;
printf("Entrez le Mois de la Date de Naissance : ");
fflush(stdin);
scanf("%d",&n);
pmemb->DateNaissance.Mois=n;
printf("Entrez l'annee de la Date de Naissance : ");
fflush(stdin);
scanf("%d",&n);
pmemb->DateNaissance.Annee=n;
//CHOIX DU SEXE
printf("Choisissez le sexe : (M ou F)");
do
{
choiSex=toupper(getch());
}
while(choiSex!='M' && choiSex!='F' );
pmemb->Sexe=choiSex;
}
fwrite(pmemb,sizeof(membre),1,fm);
fseek(fm,(nmemb-1*sizeof(membre)),SEEK_END);
// booleen retourné pour verifier l'etat de l'encodge
if(boole==1)
{
retour=1;
}
else
{
retour=0;
}
//fclose(fm);
return retour;
}
A voir également:
- FICHIER EN C
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
je pense que le problème viens du fseek.
J'ai un peu de mal à voir ce qui est fait, mais j'ai l'impression que tu écris dans le fichier puis reviens en arrière: donc l'entrée precedente est effacé par la suivante. à l'avenir, utilise les balises < code> et </ code> pour pouvoir garder l'indentation de ton texte
J'ai un peu de mal à voir ce qui est fait, mais j'ai l'impression que tu écris dans le fichier puis reviens en arrière: donc l'entrée precedente est effacé par la suivante. à l'avenir, utilise les balises < code> et </ code> pour pouvoir garder l'indentation de ton texte