PB de gestion de fichier!!!!

Signaler
Messages postés
153
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
31 octobre 2006
-
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
J'ai un probleme avec la boucle qui se trouve en dessous ( do ... while(!feof(fichier)) ).
quand on arrive a la fin du fichier il fait une erreur. il n'arrive a lire la fin du fichier. Quand je rentre dans le if(), il n'y a pas de pb, ca marche bien grace au break; qui evite d'aller jusqu'a la fin du fichier.
si quelqu'un sait pourquoi j'ai une erreur, ca serait cool qu'il m'explique.
merci kobee12.
voici la boucle :

fichier = fopen("essai.txt", "r");

rewind(fichier); //reposition au debut du fichier
/* recuperation des donnees pour une date donnee*/
do
{
fgets(buf,200,fichier); //lecture d'une ligne du fichier
//decoupage de la ligne recuperee
sscanf(buf,"%d %d %[^\n]%s",&n_jour,&n_mois,msg);
if((n_jour==num_jour) && (n_mois==mois))
{
/*decoupage des enregistrements*/
i=0;
Info[i]=strtok(msg,"Ï");
for(i=1;i<12;i++)
{
Info[i]=strtok(NULL,"Ï");
}
break; // on sort de la boucle
}
}while(!feof(fichier)); //tant qu'on n'est pas a la fin du fichier
fclose(fichier);
/* fin recuperation des donnees*/

1 réponse

Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

fichier = fopen("essai.txt", "r");

// Cela peut être utile parfois de vérifier si un fichier est belle et bien ouvert! Ca évite de lire de 'l'aire' et d'avoir des erreurs =P
if ( fichier != NULL ) {

// Pas besoin de mettre le curseur au début car à l'ouverture d'un fichier, le curseur est déjà au début, alors inutile.
//rewind(fichier); //reposition au debut du fichier
/* recuperation des donnees pour une date donnee */
// Ici ce n'est pas inutile, si le fichier est vide dès le départ, on ne rentre pas dans la boucle, plutôt pratique!

while ( !feof(fichier) ) { //tant qu'on n'est pas a la fin du fichier

fgets(buf,200,fichier); //lecture d'une ligne 'de 200 caractères' du fichier

//decoupage de la ligne recuperee
sscanf(buf,"%d %d %[^\n]%s",&n_jour,&n_mois,msg);
if ( (n_jour num_jour) && (n_mois mois) ) {

/* decoupage des enregistrements */
// Ici 'i' vaut toujours 0 au départ alors pas besoin du 'i' dans:
Info[0] = strtok(msg,"Ï");

for ( i = 1; i < 12; i++ ) {

Info[i]=strtok(NULL,"Ï");

}

break; // on sort de la boucle

}

}

fclose(fichier);

}


Pour ce qui est de ton for() et compagnie, tu pourrais te faire une petite 'routine' qui fait tout ca, bref c'est mon avis perso, le code serai plus 'claire' si on veut. Bon bien c'est tout!

~(.:: NitRic ::.)~