Fichier bufferisé en C

Fermé
themahg - 16 mars 2006 à 11:05
 themahg - 17 mars 2006 à 10:28
j'ai un probleme avec mon programme sur le fichier, il m'affiche que le premier element, je ne sai si le probleme est dans la fct encoder ou afficher. Voici une partie du code si dessous:

int encod_memb(FILE *fm,membre* pmemb,int nmemb)
{
long tmp=0;
char touche[5],choiSex;
int retour,verifNum=0,i=0,n,boole=0;

fflush(stdin);

nmemb;
printf("\n\tENCODER LE MEMBRE No %d",nmemb+1);
printf("\n\t_____________________\n");

do
{
printf("Encoder le No de Licence (compris entre 1000 et 10.000) :");
fflush(stdin);
gets(touche);
tmp=atol(touche);

if(tmp>1000 && tmp<10000)
{
boole=1;
}
else
{
boole=0;
}
}
while( verifNum==1);

if(boole==1)
{
pmemb->NumLicence=tmp;
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,sizeof(membre),SEEK_END);
}

// booleen retourné pour verifier l'etat de l'encodge
if(boole==1)
{
retour=1;
}
else
{
retour=0;
}

return retour;
}
//.................AFFICHAGE SEQUENTIEL D'UN MEMBRE //
void affich_memb(FILE* fm,membre* pmemb)
{
char continuer;

int i=0;
int nbremembre;
system("cls");

fseek(fm,0,SEEK_END);
nbremembre=ftell(fm)/sizeof(membre);
printf("nbre de membre: %d",nbremembre);
fseek(fm,0,SEEK_SET);
do
{
// fseek(fm,i*sizeof(membre),0);
fread(pmemb,sizeof(membre),1,fm);
printf("\n\tAFFICHAGE DU MEMBRE No %d\n",i+1);
printf("NumLicence : %u\n",(pmemb+i)->NumLicence);
printf("Nom : ");
puts((pmemb+i)->nom);
printf("Prenom : ");
puts((pmemb+i)->prenom);
printf("DateNaissance : %d",(pmemb+i)->DateNaissance.Jour);
printf(" / %d",(pmemb+i)->DateNaissance.Mois);
printf(" / %d",(pmemb+i)->DateNaissance.Annee);
printf("\nSexe : %c\n",(pmemb+i)->Sexe);
printf("\n\n continuer ? ""o / n""\n");
fflush(stdin);
continuer=toupper(getch());
i++;
}
while( i<nbremembre && continuer!='n');


}
A voir également:

1 réponse

j'ai un probleme avec mon programme sur le fichier, il m'affiche que le premier element, je ne sai si le probleme est dans la fct encoder ou afficher. Voici une partie du code si dessous:
essayer de regarder le code pour voir ce qui ne va pas!

int encod_memb(FILE *fm,membre* pmemb,int nmemb)
{
long tmp=0;
char touche[5],choiSex;
int retour,verifNum=0,i=0,n,boole=0;

fflush(stdin);

nmemb;
printf("\n\tENCODER LE MEMBRE No %d",nmemb+1);
printf("\n\t_____________________\n");

do
{
printf("Encoder le No de Licence (compris entre 1000 et 10.000) :");
fflush(stdin);
gets(touche);
tmp=atol(touche);

if(tmp>1000 && tmp<10000)
{
boole=1;
}
else
{
boole=0;
}
}
while( verifNum==1);

if(boole==1)
{
pmemb->NumLicence=tmp;
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,sizeof(membre),SEEK_END);
}

// booleen retourné pour verifier l'etat de l'encodge
if(boole==1)
{
retour=1;
}
else
{
retour=0;
}

return retour;
}
//.................AFFICHAGE SEQUENTIEL D'UN MEMBRE //
void affich_memb(FILE* fm,membre* pmemb)
{
char continuer;

int i=0;
int nbremembre;
system("cls");

fseek(fm,0,SEEK_END);
nbremembre=ftell(fm)/sizeof(membre);
printf("nbre de membre: %d",nbremembre);
fseek(fm,0,SEEK_SET);
do
{
// fseek(fm,i*sizeof(membre),0);
fread(pmemb,sizeof(membre),1,fm);
printf("\n\tAFFICHAGE DU MEMBRE No %d\n",i+1);
printf("NumLicence : %u\n",(pmemb+i)->NumLicence);
printf("Nom : ");
puts((pmemb+i)->nom);
printf("Prenom : ");
puts((pmemb+i)->prenom);
printf("DateNaissance : %d",(pmemb+i)->DateNaissance.Jour);
printf(" / %d",(pmemb+i)->DateNaissance.Mois);
printf(" / %d",(pmemb+i)->DateNaissance.Annee);
printf("\nSexe : %c\n",(pmemb+i)->Sexe);
printf("\n\n continuer ? ""o / n""\n");
fflush(stdin);
continuer=toupper(getch());
i++;
}
while( i<nbremembre && continuer!='n');


}
0