Initialisation de structure

goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 12 nov. 2004 à 18:43
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 15 nov. 2004 à 23:00
Salut,

J'ai une structure temps:
struct temps 
{
float time, elapsedTime, lastTime;
};


Je l'itinialise :
struct temps Time[2];


Donc ici, on pourras mettre Time[1] et Time[2].

Mais j'aimerais ne pas avoir à définir un nombre au départ car à l'initialisation je ne sais pas combien de structures temps j'aurai besoin.

Si je fais ça c'est bon ??? :
struct temps Time[];

82 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 18:04
non, t'es vraiment sur de savoir ce qu'est un tableau ? pourquoi ca s'indexe à partir de 0 ?

tu trouve pas que c'est stupide de déclarer 'int tab[3];' pour se servir de tab[1] et de tab[2] tout ca parce que t'arrive pas à te faire à l'idée que le premier element est tab[0] ?
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
14 nov. 2004 à 20:00
ca c'est vrai ;)

bon moi aussi j'ai une question.

suposons que j'ai une classe commeaç:

typedef struct _objet{public:float * datas;int numdatas;};

et que come goutbouyo je ne sais pas de combien je vais avoir besoin.
Donc, a un moment donné, je vais devoir instancier et initialiser ma strtuct, okay?
bon allons-y:
_objet *objet;
mais la c'est comme si j'en créais une infinité (oui djl on est d'accord c'est juste unpointeur mais c'est pour faire simple)
Il va donc falloir allour de la mem a la fois pour les struct et pour les 'data' (les numdatas ya pas besoin)
donc au lieu de faire ca on fait:
_objet *objet=(_objet*)malloc(sizeof(float)*???);
evidemment le ??? je sé pas ce que c'est...
pasque le probleme, c'est que je veux pouvoir créer et supprimer a volonté des _objet objet, ayant chacun une liste de data de longueur propre.

essayons ca:
_objet *objet;
objet[0].datas=(float*)malloc(sizeof(float)*numdatas);
// la numdatas ne serait pas membre de objet mais général
objet[1]......etc,etc
sans oublier free.
ca marcherait?
0
T'as rien compris djl,
Ma structure à un rapport avec des ennemies, donc je veux que le premier élément du tableau correspondent au 1er ennemi( et non au 0ème ...).

C'est pour ça que j'utilise pas Time[0].time

Tu t'en rends peut être pas compte comme ça, mais ça simplifie bcp mon programme de faire comme ça, par rapport au nbre d'ennemie.
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
14 nov. 2004 à 20:36
je vois ca que tu veux dire, mais dsl je suis daccord avec djl.
et ca simplifie pas du tout je pense
par ex tu fais
for (i=0;i<nb_enemie;i++)
au lieu de:
for (i=1;i<=nb_enemie;i++)

et pis ca bouffe de la mem, etc
enfin tu fais ce que tu veux, ton prog (nota à dlj: il me l'a file) n'est pas mal du tout comme ca, mais ton code ne sera jamais 'propre' commaç
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 20:51
goutbouyo > toi tu comprends pas qu'on ne cherche qu'a t'aider (et surtout à te faire gagner du temps)

tu codes mal, tu modélises mal les problemes, du coup tu produis du code que tu jetteras à la poubelle quand tu auras un meilleur niveau, encore une fois à quoi ca te sert ??

avec le k&r et de la motivation, tu apprends les bases du c en 2 semaines, apres tu seras plus efficaces mais tu auras encore beaucoup à apprendre de tes erreurs

tu dis que tu n'as pas le temps ? alors pourquoi tu perds ton temps à coder avec autant d'inefficacité ?

tu dis que j'ai rien compris ? et "C'est pour ça que j'utilise pas Time[0].time", c'est surtout que t'a aucune methode pour analyser et modeliser un probleme correctement, et tu connais pas le langage donc tu ne sais pas l'exploité
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
14 nov. 2004 à 21:00
Je me résigne ...
Vous avez tous les 2 raisons et vous connaissez largement mieux que moi le language.
A djl => le k&r c'est un livre ou je peux le trouver sur internet ???

Donc, si je résume, vaut mieux que le 1er ennemi soit le numéro 0 et que je commence alors au début du tableau, soit Time[0].time.
C'est bien ça ???

Merci pour votre aide, et surtout pour votre patience ...
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 21:10
oui toujours, modélise d'abord ton probleme en terme d'algo et d'objet, puis adapte le pour le langage que tu utilises (indices de tableaux 0->n-1 pour c/c++...)

le k&r, oui c'est un livre, la reference en ce qui concerne le c (co ecris par le createur du langage)

http://www.eyrolles.com/Informatique/Livre/9782100051168/
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
14 nov. 2004 à 21:19
"indices de tableaux 0->n-1 pour c/c++..."

Qu'est ce que ça veut dire ça : 0->n-1 ???
Désolé ...
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
14 nov. 2004 à 21:27
ca veut dire
for (int a=0;a!=n-1;a++){}

bon et pour mon probleme? allez quoi djl, en plus ca sera ton 2000ème msg ici! faut qu'il soit beau!
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 21:27
si ta int tab[3] tu peux indexer de 0 à 3-1 (j'aurais du ecrire [0,n-1])
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
14 nov. 2004 à 21:29
et dis voir, ton bouquin ne parle que du C... ya pas alors les trucs genre char *texte;? ni la poo?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 21:38
char *texte c'est du c

la poo ? chaque chose en son temps, la on en est tres loin
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
14 nov. 2004 à 21:43
Ok merci pour votre aide.
Oui la poo j'en suis pas encore là ...
Moi j'ai un livre qui s'appelle language C écrit par Claude Delannoy.

Vous savez s'il est bien ???
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 21:47
je suis pas sur mais il me semble avoir eu des echos plutot négatif à propros de ce livre (mais je ne le connais pas)

k&r reste une valeur sur
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
14 nov. 2004 à 22:23
Ok.
C'est vrai que je le trouve un peu mal stucturé ...
Je vais voir pour ton livre.
Au fait pourquoi tu l'appeles k&r ??? C'est par rapport aux noms des auteurs ???
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 22:35
oui, Brian W. Kernighan et Dennis M. Ritchie
ritchie est le createur du langage c
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
15 nov. 2004 à 18:52
c'est pas bjarne Stroupjesépusquoi?
et pour ma question, 16 messages au dessus ?
merci ;)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 nov. 2004 à 19:07
ben non bs c'est le c++

pour ta question, en fait c'est marrant mais tu semble confondre c et c++

typedef struct, malloc, free &co c'est du c tout ca

typedef struct _objet {public:float * datas;int numdatas;};

en c++ cette ecriture est redondante, pas besoin de typedef (de meme pour le public:)

struct _objet {float * datas;int numdatas;};

c'est la meme chose, apres englobe ca dans un vrai design de classe auffrant une sécurité à ton pointeurs (constructeur par defaut, destructeur (virtuel), operator=, constructeur par copie)

_objet *objet;
objet[0].datas=(float*)malloc(sizeof(float)*numdatas);
on est bien d'accord que objet[0] n'existe pas, donc erreur

maintenant en c++ utilise toujours new/delete (et new[]/delete[]) et oubli *alloc/free, c'est tres important car new et delete construisent et detruisent tes objets

et je peux que te conseiller d'utiliser les conteneurs générique de la stl, ca va énormenent te simplifier la vie (t'aura plus à t'occuper de tout ce qui est gestion memoire)

dans ton cas

struct _objet
{
std::vector<float> datas;
...
};

nettemen
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 nov. 2004 à 19:09
plus simple
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
15 nov. 2004 à 20:43
joli double post, comment t'as fait ca? lol
je sais bien qu'avec la stl ca serait plus simple, mais j'hésite...
et pour info, je ne sais absolument pas quelles sont les différences entre C et C++, mon bouquin passait allégrement la dessus et j'ai plus ou moins appris sur le tas, d'apres des sources qui elles aussi mélangaient C et C++... si t'avais un petit lien sous le coude qui explique tout ca...

bon je vais voir mes cours pour new et delete, mais c'est pas la premiere fois que je les croise.
mais pour malloc, Nate Robbins utilise ca dans son objloader et si lui l'utilise je suppose que c'est bien non? (c'est en c++)

merci pr la réponse de tte facon.
0
Rejoignez-nous