[ANSI - C] Mettre dans un tableau 2 dimensions

Mettre dans un tableau 2 dimensions [ANSI - C] - C - Programmation

Marsh Posté le 19-09-2003 à 12:38:13    

J ai ouvert un fichier et dedant c comme ca :
 
blague toto
prof ecole
maison toit
question reponse
blanc noir
... ...
 
je voudrais mettre ca dans un tableau de char de 3 colonnes et de x lignes.
la 3eme colonne restera bien sur vide.
Je sais pas du tout faire help :/

Reply

Marsh Posté le 19-09-2003 à 12:38:13   

Reply

Marsh Posté le 19-09-2003 à 12:42:08    

1) allouer un tableau de char* [3]
2) lire avec fgets
3) couper avec strtok
4) allouer les les deux char*, recopier, mettre le 3ème à NULL
5) si trop de lignes faire un réalloc sur le tableau global

Reply

Marsh Posté le 19-09-2003 à 12:49:33    

Trop précis Taz ! Bravo ! (J'espère que tu ne t'accomoderas pas du premier degré... à bon entendeur...)

Reply

Marsh Posté le 19-09-2003 à 12:51:48    

Taz a écrit :

1) allouer un tableau de char* [3]
2) lire avec fgets
3) couper avec strtok
4) allouer les les deux char*, recopier, mettre le 3ème à NULL
5) si trop de lignes faire un réalloc sur le tableau global


 
je comprends pas l etape 1, 4, 5
je peux pas faire directement char *tab[4][2] si je sais deja que j aurais 3 colonnes et 5 lignes ?

Reply

Marsh Posté le 19-09-2003 à 12:52:58    

007seb a écrit :

Trop précis Taz ! Bravo ! (J'espère que tu ne t'accomoderas pas du premier degré... à bon entendeur...)

:pfff:

Reply

Marsh Posté le 19-09-2003 à 13:05:31    

faut m aider plus que ca car la je patauge surtout avec les mallocs realloc et tout ca.
 
pour l instant ce que j arrive a faire :
 
j ai ouvert le fichier
je sais combien de ligne il y a dedant
je sais le nombre de colonne dont j ai besoin
 
maintenant je voudrais savoir comment declarer mon tableau ?
 
moi j ai fait
char *tab[nb_de_ligne][2]
 
2 car j ai besoin de 3 colonnes tout le temps
 
maintenant je voudrais mettre mon fichier ds ce tableau.
ca devrait rentrer pilepoil mais je comprend pas ta fonction strtok.
comment va t elle savoir comment la mettre ds mon tableau>
Faut il malloc chaque case du tableau pour etre sur que ca rentre.
 
Help

Reply

Marsh Posté le 19-09-2003 à 13:09:39    

1) on fait pas les devoirs
2) on donne des pistes
3) en moins de 4 minutes, j'ai pas le temps de faire ça, si j'ai encore droit à une vie privée. en tout cas j'ai une solution fonctionnelle maintenant. et toi?

Reply

Marsh Posté le 19-09-2003 à 13:10:12    

Citation :

2 car j ai besoin de 3 colonnes tout le temps

 :heink:

Reply

Marsh Posté le 19-09-2003 à 13:11:00    

Taz a écrit :

Citation :

2 car j ai besoin de 3 colonnes tout le temps

 :heink:  


 
bah un tableau ca commence a 0 ?
tab[0]
tab[1]
tab[2]
 
ca me fait bien 3 colonne non ?

Reply

Marsh Posté le 19-09-2003 à 13:11:13    

bon, je me barre, je veux pas que ça dévie, voici une solution
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. typedef char* Ligne[3];
  5. static const char* SEP=" \t";
  6. int main()
  7. {
  8.   Ligne *tableau = NULL;
  9.   size_t max = 0;
  10.   size_t i=0;
  11.   char buffer[128];
  12.  
  13.   /* sur le forum, on peux trouver le code de la fonction getline
  14.      disponible sur certains systèmes qui permet de s'affranchir  
  15.      de la longueur de la ligne en entrée */
  16.   for(i=0; fgets(buffer, sizeof buffer, stdin) != NULL; ++i)
  17.     {
  18.       /* on agrandit le tableau s'il le faut */
  19.       if( i == max )
  20. {
  21.   max= 2*max+1;
  22.   tableau = realloc(tableau, max * sizeof *tableau);
  23. }
  24.       {
  25. size_t j=0;
  26. char *p = NULL;
  27. /* on enlève le \n final s'il est présent */
  28. p= strrchr(buffer, '\n');
  29. if(p!=NULL)
  30.   {
  31.     *p = '\0';
  32.   }
  33. /* on trouve les 2 premiers mots et on les range dans le tableau */
  34. for( j=0, p=strtok(buffer, SEP); p!=NULL && j!=2; p=strtok(NULL, SEP), ++j)
  35.   {
  36.     tableau[i][j] = malloc(strlen(p) +1);
  37.     strcpy(tableau[i][j], p);
  38.   }
  39. /* le troisième est vide, on le mets à NULL */
  40. tableau[i][2]= NULL;
  41.       }
  42.     }
  43.   /* affichage et nettoyage */
  44.   {
  45.     size_t j=0;
  46.     for( j=0; j!=i; ++j)
  47.       {
  48. printf("%u - %s - %s\n", j, tableau[j][0], tableau[j][1]);
  49. free(tableau[j][0]);
  50. free(tableau[j][1]);
  51.       }
  52.    
  53.     free(tableau);
  54.   }
  55.   return 0;
  56. }

Reply

Marsh Posté le 19-09-2003 à 13:11:13   

Reply

Marsh Posté le 19-09-2003 à 16:12:25    

Grumly- a écrit :


 
bah un tableau ca commence a 0 ?
tab[0]
tab[1]
tab[2]
 
ca me fait bien 3 colonne non ?


 
ouais mais si tu le déclare comme étant de taille 2 t'as plutôt 2 colonnes hein [:dawa]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 19-09-2003 à 18:29:45    

Si on déclare un tab[3], y a trois "cases" dans tab, auxquelles on accède à partir de l'indice zéro, donc tab[0], tab[1], tab[2].
 
Si on veut lire tab[3], on est dans les choux. :pt1cable:  
 
Une fois qu'on s'y est fait, ça va, mais faut s'en méfier !!
On déclare n et on accède de 0 jusqu'à (n-1).......


Message édité par Carbon_14 le 19-09-2003 à 18:30:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed