PB de gestion de fichier!!!!

kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 - 16 mai 2003 à 15:23
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011 - 16 mai 2003 à 23:41
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

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
16 mai 2003 à 23:41
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 ::.)~
0
Rejoignez-nous