Partage
  • Partager sur Facebook
  • Partager sur Twitter

remplir un tableau de chaines des caractères

Impossible de bien remplir le tableau à partir d'un fichier

Sujet résolu
    22 mars 2010 à 19:54:53

    Bonjour tout le monde.

    voilà ce que je compte faire avec mon programme:
    je veux écrire une fonction qui remplie un tableau de chaine des caractères à partir d'un fichier , en enregistrant chaque ligne du fichier dans une ligne du tableau.

    au premier coup ça m'a paru facile a faire , mais j'ai rencontré des difficulté a le réaliser. voici le code que j'ai écrit :


    #include <stdio.h>
    #include <stdlib.h>
    
    #define L 50//Nombre de ligne
    #define C 100//Nombre maximal de caractère dans chaque ligne
    
    void lire(char *tableau[] , int ligne);
    
    int nb; 
    
    int main()
    {
        char tableau[L][C];
        int i;
    
        lire(tableau , L);
    
    
        for(i=0  ; i<nb ; i++)
        {
            printf("%s" , tableau[i]);
        }
        getch();
        return 0;
    }
    
    
    void lire(char *tableau[]  , int ligne)
    {
    
        FILE *fichier= NULL;
        int i=0;
    
    
        fichier = fopen("fichier.txt","r");
    
        if(fichier != NULL)
        {
            while((i<ligne) &&(fgets(&tableau[i] , 50 , fichier) != NULL) )
                i++;
    
            nb=i;
    
            fclose(fichier);
        }
        else
        {
            printf("ERREUR : Impossible de trouver le fichier\n\n");
        }
    }
    


    voici le contenu du fichier "fichier.txt" :

    salut tout le monde 02
    salut tout les zeros 03
    bonjour mes amis
    c'est mon fichier


    Et voici ce que j'obtiens en console :

    salusalubonjc'est mon fichierx☺5و"


    merci de m'aider , ça fait deux jours que je suis coincé ici.
    • Partager sur Facebook
    • Partager sur Twitter
      22 mars 2010 à 20:01:56

      void lire(char *tableau[]  , int ligne)
      
      C'est faux, tu déclares un tableau de pointeurs....or toi tu veux un pointeur sur tableau (c'est à dire un pointeur qui pointe au même endroit que ton tableau 2D déclaré dans le main).
      void lire(char (*tableau)[C]  , int ligne)
      //ou bien
      void lire(char tableau[][C]  , int ligne)
      
      Il faut renseigné la taille de la deuxième dimension car c'est un tableau déclaré statiquement.



      fgets(&tableau[i] , 50 , fichier)
      
      Enlève le "&" car il attend un pointeur et non l'adresse d'un tableau.
      • Partager sur Facebook
      • Partager sur Twitter
        22 mars 2010 à 20:08:59

        Merci beaucoup meteor2 ça a marché
        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2014 à 1:39:26

          Bonsoir a tous,

          j'ai un fichier texte qui contient des lignes de cet format : 100% 77 4490 4491  ==> 588 1966 4489  ( 242 1 )

          le programme que je suis entrain de developper permet de remplir la premiere ligne d'un tableau multidimentionnel (matrice) par les nombres qui apparaissent dans chaque ligne : 77 (dans la premiere colonne ) 4490 (dabs la 2eme) etc .. sans mettre le 100% , ==> et les nombres entre parentheses !

          et voila le code que j'ai ecrit .

           j'espére que vous m'aidez je suis bloquée dans cette premiére etape de ma memoire de recherche :(

          merci d'avance :)

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

              char **init(size_t h, size_t w)
              {
                 char **m = malloc (h * sizeof (float *));
                 m[0] = malloc (h * w * sizeof (float));
                 {
                    size_t i;
                    for (i = 1; i < h; i++)
                       m[i] = m[i - 1] + w;
                 }
                 return m;
              }
              void verif (char **m)
              {
                 if (m != NULL)
                 {
                    free (m[0]);
                 }
                 free (m);
              }
              void affichage(char **m, size_t h, size_t w)
              {
                 if (m != NULL)
                 {
                    size_t i;
                    for (i = 0; i < h; ++i)
                    {
                       size_t j;
                       for (j = 0; j < w; ++j)
                       {
                          printf ("%8.0f", m[i][j]);
                       }
                       printf ("\n" );
                    }
                 }
              }


              char* SplitString(char* str, char sep) { return str; }

              main() {
                   char **tab;
                    FILE* fichier = NULL;
              char chaine[TAILLE_MAX] = "";


                  char *output, *temp;
                   char * field;
                   char sep = ' ';

                  int cnt = 1;
                   fichier = fopen("/home/chayma/Bureau/f", "r");
                   char* input = chaine;


              if (fichier != NULL)
              {

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


           output = SplitString(input, sep);

              field = output;

                   for(temp = field; *temp; ++temp){

               {
                   if (*temp == sep )         {
                       printf("%d.) %.*s\n", cnt++, temp-field, field);

                       field = temp+1;
                      

                       }


                        }

                   }
                  }

           fclose(fichier);
              }



                       // printf("%d.) %.*s\n", cnt++, temp-field, field);
                        /* 5 lignes x 9 coloness */

                 tab = init (10, 50);
                 {
                    int i;
                    for (i = 0; i < 10; ++i)
                    {
                       int j;
                       for (j = 0; j < 50; ++j)
                       {

                          tab[i][j] = 0;
                       }
                    }
                 }
                 affichage (tab, 50, 10);
                 verif(tab);

                        return 0;
          }


          • Partager sur Facebook
          • Partager sur Twitter

          remplir un tableau de chaines des caractères

          × 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