Probleme avec la fonction feof

florent -  
 Jmx34 -
Salut a tous j'ai un probleme avec la fonction feof en c :
j'ouvre un fichier vide en lecture, ensuite je fait une boucle " tant que pas eof benh je lit les elements dans le fichier "
mais voila malgres que le fichier est vide, il rentre quand meme une fois dans la boucle.. je ne comprend pas pourquoi, si vous pouvez m'aider ca serait sympa

VOila le code source taper et j'ai mis en commentaire ou sa deconne :

t_personne * transf_fich_pers_ram ()
{
//cette procedure recupere la liste chainée de la table personne sur le disque et la reconstruit en memoire
FILE * point_fich;
t_personne * pointeur_courant;
t_personne * stock;
personne element;
t_personne * pointeur_debut;

//initialisation des pointeurs de debut et de fin de liste
pointeur_debut=NULL;

//ouverture du fichier texte en lecture

point_fich=fopen("pers.txt","r");

//cas ou erreur
if (point_fich==NULL)

{
printf("\n errreur d'ouverture du fichier \n");

return pointeur_debut;
}

//premiere insertion (traité separement car c'est la seule qui modifie la tete

if (feof(point_fich))
{

printf("fichier vide");
fclose(point_fich);
return pointeur_debut;
}
else
{
//IL rentre meme si le fichier est vide !!!!!

fread(&element,sizeof(personne),1,point_fich);
pointeur_debut=malloc(sizeof(t_personne));
pointeur_debut->fiche=element;
pointeur_courant=pointeur_debut;
pointeur_debut->point_suiv=NULL;
}
A voir également:

5 réponses

Ravachol Messages postés 568 Statut Membre 120
 
Salut,
En fait la valeur de feof n'est exploitable qu'après une première lecture.

A++

Ni l'ignorance n'est défaut d'esprit,
ni le savoir n'est preuve de génie. LUC DE CLAPIERS
0
florent
 
d'accord mais comment je peut faire alors pour tester si mon fichier est vide ou pas ?
Merci pour ton aide ;-)
0
Ravachol Messages postés 568 Statut Membre 120
 
Salut,
De cette façon cela devrait fonctionner non ?

fread(&element,sizeof(personne),1,point_fich);

if (feof(point_fich))
{
printf("fichier vide");
fclose(point_fich);
return pointeur_debut;
}
else
{
pointeur_debut=malloc(sizeof(t_personne));
pointeur_debut->fiche=element;
pointeur_courant=pointeur_debut;
pointeur_debut->point_suiv=NULL;
}

A++

Ni l'ignorance n'est défaut d'esprit,
ni le savoir n'est preuve de génie. LUC DE CLAPIERS
0
LeSousss Messages postés 150 Statut Membre 15
 
Slt,
je ne suis pas sur mais ca ne coute rien :
essaye de remplacer ca :

if (feof(point_fich))
{

printf("fichier vide");
fclose(point_fich);
return pointeur_debut;
}
else
{
//IL rentre meme si le fichier est vide !!!!!

fread(&element,sizeof(personne),1,point_fich);
pointeur_debut=malloc(sizeof(t_personne));
pointeur_debut->fiche=element;
pointeur_courant=pointeur_debut;
pointeur_debut->point_suiv=NULL;
}

par :

fread(&element,sizeof(personne),1,point_fich);
if(element=="")
{
printf("fichier vide");
fclose(point_fich);
return pointeur_debut;
}
else
{
pointeur_debut=malloc(sizeof(t_personne));
pointeur_debut->fiche=element;
pointeur_courant=pointeur_debut;
pointeur_debut->point_suiv=NULL;
}
0
florent
 
malheuresment ca ne marche pas j'ai toujours une mauvaiseddetection de mon fameu eof
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jmx34
 
Salut,

J'ai eu le même problème et j'ai trouvé une solution, si ça peut servir à des gens.

C'est pas propre mais ça marche pour moi. Faut que avant tu ajoutes un truc genre :
fscanf(base_fait,";\n");

Le but c'est de forcer une lecture qui ne fera pas bouger le pointeur. Tu colles un petit fscanf comme je l'ai fais, il lit rien du tout et ça fonctionne. Tu le colles après avoir ouvert ton fichier, t'auras plus de problème.
0