Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème fscanf et tableau de structure

Sujet résolu
    3 janvier 2009 à 17:07:48

    Bonjour,

    Je galère un peu sur un bout de code où je voudrais allouer dynamiquement un tableau de structure dans une fonction puis mettre mettre les valeurs qui se trouvent dans un fichier texte dans ce tableau...
    Voici ce que j'ai fais:

    main.c
    #include <stdio.h>
    #include <stdlib.h>
    
    #include "fonctions.h"
    
    int main (int argc, char *argv[])
    {
        int q = 0;
    
        Niveau *aze = NULL;
    
        modifier(&aze);
    
    /*ici je vérifie que les valeurs de aze ont bien été modifiées
    (ce qui n'est pas le cas vu que ça plante)*/
        for(q = 0; q < 6; q++)
        {
            printf("B %d\n", aze[q].num);
        }
    
        free(aze);
        return 0;
    }
    


    fonctions.c
    #include <stdio.h>
    #include <stdlib.h>
    
    #include "fonctions.h"
    
    void modifier(Niveau **aze)
    {
        FILE *fichier = NULL;
        int i = 0;
    
        aze = malloc(6 * sizeof(Niveau));
    
        fichier = fopen("test.txt", "r");
    
        if (fichier != NULL)
        {
            i = 0;
    /*le code ci-dessous est censé mettre les 6 valeurs de test.txt dans les num
    des 6 aze (j'espere que c'est compréhensible...)
    Le fscanf doit être faux mais je ne sais pas quoi mettre...*/
            while(fscanf(fichier, "%d", &aze[i]->num) != EOF)
            {
                printf("A %d\n", aze[i]->num);
                i++;
            }
    
            fclose(fichier);
        }
    }
    


    fonctions.h
    typedef struct Niveau Niveau;
    struct Niveau
    {
        int num;
    };
    
    void modifier(Niveau **aze);
    


    test.txt
    8
    7
    2
    3
    5
    22


    Dans la console il y a ça qui s'affiche:
    A 8
    A 7

    et puis ça plante...

    Je sais qu'on peut faire plus simple mais c'est pour tester.
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      3 janvier 2009 à 21:33:29

      Ce code-ci marche (modifications surlignées).

      void modifier(Niveau **aze)
      {
          FILE *fichier = NULL;
          int i = 0;
      
          *aze = malloc(6 * sizeof(**aze));
      
          fichier = fopen("test.txt", "r");
      
          if (fichier != NULL)
          {
              i = 0;
      /*le code ci-dessous est censé mettre les 6 valeurs de test.txt dans les num
      des 6 aze (j'espere que c'est compréhensible...)
      Le fscanf doit être faux mais je ne sais pas quoi mettre...*/
              while(fscanf(fichier, "%d", &(*aze)[i].num) != EOF)
              {
                  printf("A %d\n", (*aze)[i].num);
                  i++;
              }
      
              fclose(fichier);
          }
      }
      


      C'est une question de gestion de pointeurs. ;)
      • Partager sur Facebook
      • Partager sur Twitter
        3 janvier 2009 à 21:54:09

        Merci beaucoup.
        Je m'y perd un peu avec tous ces pointeurs mais ça devrait aller maintenant :D
        • Partager sur Facebook
        • Partager sur Twitter

        Problème fscanf et tableau de structure

        × 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