Problème avec fgets

Fermé
zatox Messages postés 641 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 - 25 févr. 2013 à 17:03
Bonjour, j'essaie d'apprendre le C mais j'ai quelques soucis, en particulier sur la lecture d'un fichier texte. J'ai l'impression qu'il faudrait que je fasse 2 fgets l'un derrière l'autre pour avoir ce que je veux mais je voudrais comprendre pourquoi !!
Ci-dessous je mets la partie de code concerné, le contenu du fichier que je lis et l'affichage des différents messages prévu dans mon code:

D'ABORD LE CODE

int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR])
{


FILE *f = fopen("log.txt", "a");



fprintf (f, "\n\n\n******************************************");
fprintf (f, "\nRentré dans la fonction chargerNiveau ");


int extern numero_ligne_niveaux;
/*int extern nombre_enreg_niveaux;*/

FILE* fichier = NULL;
char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0};
int i = 0, j = 0, k = 0;

fichier = fopen("niveaux.lvl", "r");
if (fichier == NULL)
return 0;

fprintf(f, "\nk = %d", k);
fprintf(f, "\nnumero_ligne_niveaux = %d", numero_ligne_niveaux);
while (k < numero_ligne_niveaux)
{
fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier);

fprintf(f, "\nBuffer de ficher = \n");
fprintf(f, "<");
fprintf(f, ligneFichier);
fprintf(f, ">");
k++;

}
fprintf(f, "\nVoici les niveaux: \n");
fprintf(f, "<");
for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
{
for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
{

switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
{

case '0':
niveau[j][i] = 0;
break;
case '1':
niveau[j][i] = 1;
break;
case '2':
niveau[j][i] = 2;
break;
case '3':
niveau[j][i] = 3;
break;
case '4':
niveau[j][i] = 4;
break;
}
fprintf(f, "%d", niveau[j][i]);
}
}
fprintf(f, ">");
fprintf(f, "\nFin les niveaux: ");

fclose(fichier);
fclose(f);
return 1;
}

ENSUITE LES 3 PREMIERS ENREGS DU FICHIER niveaux.lvl

111111111111111111111111111111111111111111111111111111111111114200000311111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111400001111111111221111111111001111111111001111111111031111111111011111111111011111111111311111111111111111
1111111111111111111111111111111111111111110011111142000011111111111011111111111011111110011001111110

ENFIN POUR FINIR L'AFFICHAGE LIE AUX DIFFERENTS fprintf DE MON CODE




******************************************
Rentré dans la fonction chargerNiveau
k = 0
numero_ligne_niveaux = 1
Buffer de ficher =
<111111111111111111111111111111111111111111111111111111111111114200000311111111111111111111111111111111111111111111111111111111111111111111111111>
Voici les niveaux:
<111111111111111111111111111111111111111111111111111111111111114200000311111111111111111111111111111111111111111111111111111111111111111111111111>
Fin les niveaux:


******************************************
Rentré dans la fonction chargerNiveau
k = 0
numero_ligne_niveaux = 2
Buffer de ficher =
<111111111111111111111111111111111111111111111111111111111111114200000311111111111111111111111111111111111111111111111111111111111111111111111111>
Buffer de ficher =
<
>
Voici les niveaux:
<000111111111111111111111111111111111111111111111111111111111114200000311111111111111111111111111111111111111111111111111111111111111111111111111>
Fin les niveaux:


******************************************
Rentré dans la fonction chargerNiveau
k = 0
numero_ligne_niveaux = 3
Buffer de ficher =
<111111111111111111111111111111111111111111111111111111111111114200000311111111111111111111111111111111111111111111111111111111111111111111111111>
Buffer de ficher =
<
>
Buffer de ficher =
<111111111111111111111111111111111111111400001111111111221111111111001111111111001111111111031111111111011111111111011111111111311111111111111111>
Voici les niveaux:
<111111111111111111111111111111111111111400001111111111221111111111001111111111001111111111031111111111011111111111011111111111311111111111111111>
Fin les niveaux:


Voilà, je ne comprends pas pourquoi au deuxième fgets le buffer de fichier est vide !!!!
Si quelqu'un a une idée ?
Merci pour vos réponses.

A voir également: