Extraire les données d'un fichier en C
Résolu
M@teo
-
M@teo -
M@teo -
Bonjour à tout le monde,
J'ai commence la programmation il y a peu, et je voulais faire un fonction qui compte le nombre de joueurs d'un fichier, et affiche ensuite leur noms et prénom. Cependant, je tombe sur une boucle infini lors de l'exécution du programme(Au niveau de la boucle while (strcmp(chaine_temp , "Prenom\n")!=0 && chaine_temp!=NULL), bien qu'il n'y ait aucune erreur a la compilation.
Voici ma fonction:
La structure "Personne" est:
Si quelqu'un a une solution à mon probleme, je le remercie d'avance!
J'ai commence la programmation il y a peu, et je voulais faire un fonction qui compte le nombre de joueurs d'un fichier, et affiche ensuite leur noms et prénom. Cependant, je tombe sur une boucle infini lors de l'exécution du programme(Au niveau de la boucle while (strcmp(chaine_temp , "Prenom\n")!=0 && chaine_temp!=NULL), bien qu'il n'y ait aucune erreur a la compilation.
Voici ma fonction:
void Test_profils() { Personne j_temp[10]; int i=0; FILE*fichier_score=NULL; fichier_score=fopen("Scores.txt", "r+"); char chaine_temp[TAILLE_MAX_CHAINE]="a"; rewind(fichier_score); while (i<10 && chaine_temp!=NULL) { while (strcmp(chaine_temp , "Prenom\n")!=0 && chaine_temp!=NULL) { fgets(chaine_temp, TAILLE_MAX_CHAINE, fichier_score); } fgets(j_temp[i].prenom, TAILLE_MAX_CHAINE, fichier_score); while (strcmp(chaine_temp , "Nom\n")!=0&&chaine_temp!=NULL) { fgets(chaine_temp, TAILLE_MAX_CHAINE, fichier_score); } fgets(j_temp[i].prenom, TAILLE_MAX_CHAINE, fichier_score); i++; } printf("\n=>%d joueur(s)\n", i); int i2=0; for(i2=0; i2<i; i++) { printf("\nJoueur %d\nPrenom:\n%s\nNom:\n%s\n", i+1, j_temp[i2].prenom, j_temp[i2].nom); } fclose(fichier_score); }
La structure "Personne" est:
typedef struct Personne Personne; struct Personne { char prenom[TAILLE_MAX_CHAINE]; char nom[TAILLE_MAX_CHAINE]; int score1; int nb_coups1; int score2; int nb_coups2; };
Si quelqu'un a une solution à mon probleme, je le remercie d'avance!
A voir également:
- Extraire les données d'un fichier en C
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Extraire une video youtube - Guide
3 réponses
Salut,
chaine_temp ne prend pas la valeur NULL à la fin du fichier, c'est fgets qui renvoie une valeur NULL , chaine_temp conservant la derniere valeur lue dans le fichier
tu peux modifier ton code comme ça par ex :
int FF=0;
while (i<10 && !FF)
{
while (!FF && strcmp(chaine_temp , "Prenom\n") )
{
if (!fgets(chaine_temp, TAILLE_MAX_CHAINE, fichier_score) )
FF=1;
}
.................................................. (même chose pour la 2eme boucle)
2eme petit chose, si tu atteint la fin de ton fichier tu incrémentes quand même i
donc ton nombre de joueurs doit être i-1
probleme sur ta boucle for : for(i2=0; i2<i; i++)
tu incrementes i et non i2, le test doit être i2< i-1
for(i2=0; i2<i-1; i2++)
chaine_temp ne prend pas la valeur NULL à la fin du fichier, c'est fgets qui renvoie une valeur NULL , chaine_temp conservant la derniere valeur lue dans le fichier
tu peux modifier ton code comme ça par ex :
int FF=0;
while (i<10 && !FF)
{
while (!FF && strcmp(chaine_temp , "Prenom\n") )
{
if (!fgets(chaine_temp, TAILLE_MAX_CHAINE, fichier_score) )
FF=1;
}
.................................................. (même chose pour la 2eme boucle)
2eme petit chose, si tu atteint la fin de ton fichier tu incrémentes quand même i
donc ton nombre de joueurs doit être i-1
probleme sur ta boucle for : for(i2=0; i2<i; i++)
tu incrementes i et non i2, le test doit être i2< i-1
for(i2=0; i2<i-1; i2++)
int FF=0;
while (i<10 && !FF)
{
while (fgets(chaine_temp, TAILLE_MAX_CHAINE, fichier_score) && strcmp(chaine_temp , "Prenom\n") ) ;
if ( !fgets(j_temp[i].prenom, TAILLE_MAX_CHAINE, fichier_score) )
FF=1;
while ( fgets(chaine_temp, TAILLE_MAX_CHAINE, fichier_score) && strcmp(chaine_temp , "Nom\n") ) ;
if (!fgets(j_temp[i].nom, TAILLE_MAX_CHAINE, fichier_score))
FF=1;
i++;
}
il y a un truc que je ne comprend pas: que fait le "!FF"de la première boucle?
for(i2=0; i2<i-1; i2++)
et ton nombre de joueurs i-1
printf("\n=>%d joueur(s)\n", i-1);