Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit problème avec fgets

il lit une ligne sur deux

    18 mai 2007 à 16:09:07

    Bonjour,

    je suis actuellement au chapitre "Lire et écrire dans des fichiers".
    J'en suis à la partie qui consiste à lire l'ensemble d'un .txt grâce à la commande fgets, ligne par ligne.
    J'utilise cet algo (j'ai regardé après l'avoir fait, il semble correspondre au corrigé du chapitre) :

    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 1000

    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        char caractere, ligne[TAILLE_MAX]="";

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

        if (fichier != NULL)
        {
            printf("Ouverture test.txt\n");// On peut lire et écrire dans le fichier//

            if (fichier != NULL)  //Regarde si le fichier contient quelque chose//
            {
                while(fgets(ligne, TAILLE_MAX, fichier) !=  NULL)
                {
                    fgets(ligne, TAILLE_MAX, fichier);
                    printf("%s", ligne);
                }
            }

            printf("\nLe fichier test.txt est ferme");
        }
        else
        {
            // On affiche un message d'erreur si on veut
            printf("Impossible d'ouvrir le fichier test.txt\n");
        }
    }


    Je poste ici car au final je suis à 99% sur de savoir où le problème !
    La fonction fgets (et c'est là son "interet") ne relit pas 2 fois la même ligne, or ici en suivant le schéma de ma boucle while on comprend pourquoi il ne me renvoit qu'une ligne sur deux !

    Le truc c'est que je n'arrive pas trop à voir comment échapper à ce problème... je n'arrive pas non plus à voir la différence avec celui qui est donné sur le site (en supposant qu'il soit effectivement bon!)

    Le voici :

    #define TAILLE_MAX 1000

    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        char chaine[TAILLE_MAX] = "";

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

        if (fichier != NULL)
        {
            while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
            {
                printf("%s", chaine); // On affiche la chaîne qu'on vient de lire
            }

            fclose(fichier);
        }

        return 0;
    }


    EDIT :
    C'est bon je viens de capter où était le problème (quel zero je fait :) )
    • Partager sur Facebook
    • Partager sur Twitter

    Petit problème avec fgets

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown