Partage
  • Partager sur Facebook
  • Partager sur Twitter

passer un fichier en parametre à une fonction

Sujet résolu
    18 septembre 2018 à 22:25:56

    bonjour à tous.

    Voila, comme le titre l'indique j'aimerais passer à une fonction un paramètre contenant un fichier.

    Pour ce faire, j'ai écris ce code:

    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 100
    
    void traitementFichier(fichier)
    {
        char chaine[TAILLE_MAX] = "";
        int test = 0;
    
        while(fgets(chaine, TAILLE_MAX, fichier) != NULL && test <= 10);
        {
            printf("%s", chaine);
            test ++;
        }
    }
    
    int main(int argc, char *argv[])
    {
        FILE *monFichier = NULL;
    
        monFichier = fopen("dico.txt", "r");
    
        if(monFichier != NULL)
        {
            traitementFichier(monFichier);
            fclose(monFichier);
        }
        else
        {
            printf("Désolé, mais le fichier n'a pas pu etre ouvert");
        }
        return 0;
    }

    Mais lors de la compilation, j'obtiens un Segmentation fault (core dumped). J'en déduis donc, que ce n'est pas comme ça que l'on passe un fichier en parametre.

    Merci pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter

    Quand on fait tout, on est bon en rien...

      18 septembre 2018 à 23:02:51

      C'est comme pour n'importe quel paramètre passé dans une fonction : type variable

      En l'occurrence ici cela donne FILE *fichier ( * car c'est un pointeur ).

      -
      Edité par MrsSniperMrsniper 18 septembre 2018 à 23:03:33

      • Partager sur Facebook
      • Partager sur Twitter
        20 septembre 2018 à 20:26:29

        Bonjour et merci de ta réponse. effectivement j'avais oublier de préciser le type de ma variable dans ma fonction,

        void traitementFichier(FILE *fichier) au lieu de void traitementFichier(fichier)

        maintenant ça marche.

        en revanche pour une raison que j'ignore je n’obtiens dans mon printf que la dernière ligne du fichier alors que j'aimerais que tout s'affiche.

        lors de la compilation j'ai un warning qui s'affiche:

        this 'while' clause does not guard... [-wmisleading-indentation]

        note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘while’

        -
        Edité par bocaldesmers 20 septembre 2018 à 21:06:24

        • Partager sur Facebook
        • Partager sur Twitter

        Quand on fait tout, on est bon en rien...

          20 septembre 2018 à 22:38:27

          Bonjour bocaldemers,

          Je dirais que l'erreur est à la ligne 10.

          "gets () et fgets () retournent s en cas de succès, et NULL en cas d'erreur ou lorsque la fin du fichier se produit alors qu'aucun caractère n'a été lu" 

          Et je dirais que ta variable test bloque aussi la lecture. Une fois 10 caractère lus on ne peut plus en lire d'autres car test n'est jamais remis à zéro. 

          Et ta chaîne est initialisé avec un espace c'est fait exprès? J'ai pas souvent vu ça ^^

          Donc voilà je pense que tu as une mauvaise condition dans le while:) J'espère t'avoir aidé bonne chance 

          Ps: Je suis fatigué et J'ai pris peu de temps pour lire je me suis peut être trompé :p

          -
          Edité par Kasewa 20 septembre 2018 à 22:48:36

          • Partager sur Facebook
          • Partager sur Twitter
            20 septembre 2018 à 23:04:17

            Hello,

            bocaldesmers a écrit:

            ....en revanche pour une raison que j'ignore je n’obtiens dans mon printf que la dernière ligne du fichier alors que j'aimerais que tout s'affiche.

            lors de la compilation j'ai un warning qui s'affiche:

            this 'while' clause does not guard... [-wmisleading-indentation]

            note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘while’

            Hé oui, le warning a sa raison d'être: il y a un ; en trop à la fin de la ligne 10, d'où l'affichage de la dernière ligne lue seulement

            -
            Edité par edgarjacobs 20 septembre 2018 à 23:09:54

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              21 septembre 2018 à 21:14:53

              Merci à tous pour votre aide, comme je ne voyais pas mon erreurs, j'ai tout réécris, du coup ça marche maintenant.

              En fait j'avais simplement ajouter par mégarde un ; a la fin du while. Sans ce ; le code fonctionne comme je le souhaite.

              -
              Edité par bocaldesmers 22 septembre 2018 à 14:53:57

              • Partager sur Facebook
              • Partager sur Twitter

              Quand on fait tout, on est bon en rien...

                22 septembre 2018 à 1:42:47

                Cet exemple est intéressant car il montre bien qu'il faut toujours faire comme si un Warning était une véritable erreur (jusqu'à le comprendre en tout cas).

                -
                Edité par robun 22 septembre 2018 à 1:43:36

                • Partager sur Facebook
                • Partager sur Twitter

                passer un fichier en parametre à une fonction

                × 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