Probleme avec la fonction feof
florent
-
Jmx34 -
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;
}
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:
- Probleme avec la fonction feof
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
5 réponses
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
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
d'accord mais comment je peut faire alors pour tester si mon fichier est vide ou pas ?
Merci pour ton aide ;-)
Merci pour ton aide ;-)
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
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
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;
}
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;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.