Connaître le nombre d'éléments d'un tableau

Connaître le nombre d'éléments d'un tableau - C - Programmation

Marsh Posté le 21-01-2004 à 11:08:27    

C'est peut être tout bête mais je vois pas.
 
ex:
 
int tab[10]={11,22,33};
 
j'aimerai obtenir 3 (car il y a 3 élements).
 
Comment faire ??
 
merci


---------------
-->>C'est l'histoire d'un gars qui rêve qu'il mange de la guimauve.Il se réveille et il a plus d'oreiller.<<--
Reply

Marsh Posté le 21-01-2004 à 11:08:27   

Reply

Marsh Posté le 21-01-2004 à 11:17:37    

question deja repondu.
En c spapossible comme ca.
 
le mieux ets que tu encapsule ton tableau dans un struct ou tu tiens a jour le nb d'element et que tu interroge ad libidum.

Reply

Marsh Posté le 21-01-2004 à 11:24:58    

Si prévu à l'origine, on peut aussi mettre le nombre d'éléments en dim zéro, suffit de prévoir une "case" de plus. Pour lire les données, on part de l'indice 1.

Reply

Marsh Posté le 21-01-2004 à 19:42:56    

et si c'est un tableau de char et qu'on a 300 éléments ?

Reply

Marsh Posté le 21-01-2004 à 21:30:38    

Ca marche pour les tableaux d'int.... Il parlait d'int(s).
 
(En VB3, il me semble qu'on trouvait la taille de la chaîne en lisant les deux octets aux adresses Chaine-1, et Chaine-2 d'après mes essais, à confirmer. Que de choses cachées dans VB !...)

Reply

Marsh Posté le 21-01-2004 à 22:40:09    

deff a écrit :

C'est peut être tout bête mais je vois pas.
 
ex:
 
int tab[10]={11,22,33};
 
j'aimerai obtenir 3 (car il y a 3 élements).
 
Comment faire ??
 
merci

Non, il y en a 10.
Vas relire ton cours.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-01-2004 à 23:48:45    

mdr

Reply

Marsh Posté le 22-01-2004 à 00:45:37    

gilou a écrit :

Non, il y en a 10.
Vas relire ton cours.
A+,


 
un peu violent, mais c vrai :d

Reply

Marsh Posté le 22-01-2004 à 01:59:03    

Toutaffé. Et d'ailleurs :

Code :
  1. #include <stdio.h>
  2. int
  3. main()
  4. {
  5.         int tab[10]={11,22,33};
  6.         printf("Nb éléments: %u\n", sizeof(tab)/sizeof(*tab));
  7. }

Reply

Marsh Posté le 22-01-2004 à 08:57:48    

on a deja dit que ct moche ca :D
y a eu un topic fleuve sur ce sujet lancé par taz y  a pas longtemps :p
 

Code :
  1. template<typename T, size_t N>
  2.  inline size_t size(const T (& )[N])
  3.  {
  4.      return N;
  5.  }


Message édité par Joel F le 22-01-2004 à 08:59:16
Reply

Marsh Posté le 22-01-2004 à 08:57:48   

Reply

Marsh Posté le 22-01-2004 à 11:44:00    

Joel F a écrit :

on a deja dit que ct moche ca :D
y a eu un topic fleuve sur ce sujet lancé par taz y  a pas longtemps :p
 

Code :
  1. template<typename T, size_t N>
  2.  inline size_t size(const T (& )[N])
  3.  {
  4.      return N;
  5.  }




 
je comprends meme pas ce que ca veut dire  :??:

Reply

Marsh Posté le 22-01-2004 à 11:52:10    

Joel F a écrit :

on a deja dit que ct moche ca :D
y a eu un topic fleuve sur ce sujet lancé par taz y  a pas longtemps :p
 

Code :
  1. template<typename T, size_t N>
  2.   inline size_t size(const T (& )[N])
  3.   {
  4.       return N;
  5.   }




 
Et tu compiles ca comment en C ? [:icon11]
DEHORS :O

Reply

Marsh Posté le 22-01-2004 à 12:35:30    

directement avec une fonction tu peux pas je pense.
il faut initialiser ton tablo avec un valeur quelconque (-1 par ex), puis le parcourir jusqu'a que tu trouve cette valeur.
a moins qu'a la creation d'un tableau une valeur par defaut soit deja attribuée ..
while (tab[n]!=-1) n++;
--> n-1 = 3


Message édité par djobidjoba le 22-01-2004 à 12:38:24
Reply

Marsh Posté le 22-01-2004 à 13:09:18    

Une idée conne mais ca marche: (enfin, surment)
Dans ton tableau, l'élément tab[0] = nbelement et a chaque fois que tu rajoute un élément dans ton tableau, tu fais tab[0]++;
 
Bon, c de la bidouille et c chiant de faire "tab[0]++;" pour un gros prog...


Message édité par smilm le 22-01-2004 à 13:09:38
Reply

Marsh Posté le 22-01-2004 à 14:03:57    

chrisbk a écrit :


 
Et tu compiles ca comment en C ? [:icon11]
DEHORS :O


 
Toi dehors :o
C'est pour dire qu'en C c'est pas possible aors que dans un vrai langage ca l'est   :kaola:


Message édité par Joel F le 22-01-2004 à 14:04:15
Reply

Marsh Posté le 22-01-2004 à 14:29:07    

Joel F a écrit :


 
Toi dehors :o
C'est pour dire qu'en C c'est pas possible aors que dans un vrai langage ca l'est   :kaola:  


 
Ouais le C est pas un vrai langage, c'est connu. D'ailleurs unix c est pas un vrai os puisque c'est pas fait avec un vrai langage.

Reply

Marsh Posté le 22-01-2004 à 14:31:06    

chaica a écrit :


 
Ouais le C est pas un vrai langage, c'est connu. D'ailleurs unix c est pas un vrai os puisque c'est pas fait avec un vrai langage.


 
bon, pinaillons pas et allons droit au but. Le C, c'est a chier.

Reply

Marsh Posté le 22-01-2004 à 14:31:23    

euh .... y a un :o c'est pas pour rien :kaola:

Reply

Marsh Posté le 22-01-2004 à 16:23:52    

chrisbk a écrit :


 
bon, pinaillons pas et allons droit au but. Le C, c'est a chier.
 


 
tu doit pourtant bien t'amuser avec les jeux d'idsofware qui sont en c :D

Reply

Marsh Posté le 22-01-2004 à 16:25:56    

skelter a écrit :


 
tu doit pourtant bien t'amuser avec les jeux d'idsofware qui sont en c :D  


 
(IMHO gnagnag)
tu peux tout faire en C, n'empeche que ce langage est naze et date d'avant guerre. Comment peut on aimer ce langage restera pour moi un mystere
 

Reply

Marsh Posté le 22-01-2004 à 16:28:30    

gilou a écrit :

Non, il y en a 10.
Vas relire ton cours.
A+,


 
oh le lourd...
 
je pense que la plupart des gens avait compris "éléments initialisés".
 
Pour les autres, merci je vais suivre la solution du "var[0]=nb_element"
 


---------------
-->>C'est l'histoire d'un gars qui rêve qu'il mange de la guimauve.Il se réveille et il a plus d'oreiller.<<--
Reply

Marsh Posté le 22-01-2004 à 16:34:52    

qui est laide, anti pratique et franchement moche (mais je l'ai deja dit).
 
Fait une structure bourdel :fou:

Reply

Marsh Posté le 22-01-2004 à 16:39:01    

+1
 
le truc du premier element c'est quand meme assez drole ;)

Reply

Marsh Posté le 22-01-2004 à 16:40:43    

et chiant, et deconcertant pour un relecteur et tu il vas revenir pleurer bicose son programme plante lorsque 'un  
jour il va oublier de faire tab5[0]++; [:kiki]

Reply

Marsh Posté le 22-01-2004 à 16:44:47    

ba oui completement! c'est tout simplement ingerable

Reply

Marsh Posté le 22-01-2004 à 17:09:35    

deff a écrit :


 
oh le lourd...
 
je pense que la plupart des gens avait compris "éléments initialisés".
 
Pour les autres, merci je vais suivre la solution du "var[0]=nb_element"
 
 


 
hum, tu as encore faux..
les autres sont aussi initialisés, à 0

Reply

Marsh Posté le 22-01-2004 à 17:10:45    

captainneuneu a écrit :


 
hum, tu as encore faux..
les autres sont aussi initialisés, à 0


non

Reply

Marsh Posté le 22-01-2004 à 17:19:24    

lol

Reply

Marsh Posté le 22-01-2004 à 18:21:57    


 
oui

Code :
  1. #include <stdio.h>
  2. void main()
  3. {
  4.     int test[10]={1,2,3};
  5.     int i;
  6.     for(i=0;i<10;i++)
  7.     {
  8.         fprintf(stdout,"%d\n",test[i]);
  9.     }
  10. }


 
sous visual en tout cas


Message édité par captainneuneu le 22-01-2004 à 18:24:30
Reply

Marsh Posté le 22-01-2004 à 18:47:09    

c'est pas seulement vc++, normalement quand tu initialise un tableau avec 3 elements tous les autres sont initialiser a 0
quand on declare une chaine, on fait jamais
char s[20]="machin\0"; non?


Message édité par skelter le 22-01-2004 à 18:48:19
Reply

Marsh Posté le 22-01-2004 à 18:54:11    

skelter a écrit :

c'est pas seulement vc++, normalement quand tu initialise un tableau avec 3 elements tous les autres sont initialiser a 0
quand on declare une chaine, on fait jamais
char s[20]="machin\0"; non?


 
ben pour une chaine, je sias pas, mais pour le tableau, je suis plutot sur de mon coup.. j'espere que taz va pâs debarquer dans 2 min pour me prouver le contraire  :whistle:

Reply

Marsh Posté le 22-01-2004 à 19:04:17    

deff a écrit :


 
oh le lourd...
 
je pense que la plupart des gens avait compris "éléments initialisés".
Pour les autres, merci je vais suivre la solution du "var[0]=nb_element"
 
 

Justement, le fait d'utiliser une ecriture
int tab[10]={11,22,33};  va initialiser tous les elements de ton tableau (et initialisera a 0 les 7 que tu n'as pas ecrit).
C'est la difference avec  
int tab[10]; qui n'initialise rien.
Un tableau, son initialisation a la declaration c'est du tout ou rien.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-01-2004 à 19:05:27    

joel f a écrit :

qui est laide, anti pratique et franchement moche (mais je l'ai deja dit).
 
Fait une structure bourdel :fou:

+1
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-01-2004 à 19:07:41    

bah réfléchi un peu ... les char sont des ... entiers. donc ou, àa mets à 0 le reste.
de toutes façons
 
"taz" <-> {'t', 'a', 'z', '\0'} oh des entiers, et après on rempli le reste avec des 0 comme prévu.

Reply

Marsh Posté le 22-01-2004 à 19:09:16    

captainneuneu a écrit :


 
ben pour une chaine, je sias pas, mais pour le tableau, je suis plutot sur de mon coup.. j'espere que taz va pâs debarquer dans 2 min pour me prouver le contraire  :whistle:  

Pas d'inquietude, c'est dans la spec du C.
Pour ca que l'on trouve souvent le dialecte
un_type un_tableau[UN_NOMBRE] = {0};  
pour initialiser completement le tableau a sa declaration.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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