Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
790 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [ANSI - C] Mettre dans un tableau 2 dimensions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ANSI - C] Mettre dans un tableau 2 dimensions

n°518134
Grumly-
Powered by swiffer
Posté le 19-09-2003 à 12:38:13  profilanswer
 

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 :/

mood
Publicité
Posté le 19-09-2003 à 12:38:13  profilanswer
 

n°518137
Taz
bisounours-codeur
Posté le 19-09-2003 à 12:42:08  profilanswer
 

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

n°518144
007seb
Posté le 19-09-2003 à 12:49:33  profilanswer
 

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

n°518146
Grumly-
Powered by swiffer
Posté le 19-09-2003 à 12:51:48  profilanswer
 

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 ?

n°518147
Taz
bisounours-codeur
Posté le 19-09-2003 à 12:52:58  profilanswer
 

007seb a écrit :

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

:pfff:

n°518158
Grumly-
Powered by swiffer
Posté le 19-09-2003 à 13:05:31  profilanswer
 

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

n°518160
Taz
bisounours-codeur
Posté le 19-09-2003 à 13:09:39  profilanswer
 

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?

n°518161
Taz
bisounours-codeur
Posté le 19-09-2003 à 13:10:12  profilanswer
 

Citation :

2 car j ai besoin de 3 colonnes tout le temps

 :heink:

n°518162
Grumly-
Powered by swiffer
Posté le 19-09-2003 à 13:11:00  profilanswer
 

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 ?

n°518163
Taz
bisounours-codeur
Posté le 19-09-2003 à 13:11:13  profilanswer
 

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. }

mood
Publicité
Posté le 19-09-2003 à 13:11:13  profilanswer
 

n°518314
antp
Super Administrateur
Champion des excuses bidons
Posté le 19-09-2003 à 16:12:25  profilanswer
 

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
n°518420
Carbon_14
Posté le 19-09-2003 à 18:29:45  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [ANSI - C] Mettre dans un tableau 2 dimensions

 

Sujets relatifs
aidez moi ... je veux mettre des info de page xml ds une page html ...Tableau d objet, creation dobjet commetn faire dans ce cas :
tableau et débordement de textetableau de pointeur sur fonction !!!
[Resolu] Pb avec un tableau de string en property[CSS]Mettre une image de fond
[html / css ] - bloquer la taille d'un tableau en largeur mais pas ...[djgpp] mettre une icône à un .exe
Windows : Forcer l'ecran a se mettre en veille[CSS] Mettre en forme du code
Plus de sujets relatifs à : [ANSI - C] Mettre dans un tableau 2 dimensions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR