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

  FORUM HardWare.fr
  Programmation
  C++

  Peut-on initialiser les champs d'une structure?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Peut-on initialiser les champs d'une structure?

n°208867
heffer
PDG du Site des Mains
Posté le 04-09-2002 à 19:46:05  profilanswer
 

Par ex:
typedef struct
{int a=0;
 int b=1;
}x;
 
Ça marche?

mood
Publicité
Posté le 04-09-2002 à 19:46:05  profilanswer
 

n°209032
Musaran
Cerveaulté
Posté le 05-09-2002 à 03:36:08  profilanswer
 

Non, x est une forme, pas une valeur.
 
On peut initialiser à l'instanciation:

Code :
  1. x ox= {0,1};


 
Maintenant, si tu veux qu'à chaque fois que tu crée un x il soit automatiquement initialisé avec a=0,b=1...
...alors il est temps de passer au C++ qui dispose de constructeurs faits pour ça:

Code :
  1. struct x{
  2. int a;
  3. int b;
  4. x(){
  5.  a=b=0;
  6. }
  7. };


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°209115
heffer
PDG du Site des Mains
Posté le 05-09-2002 à 11:10:48  profilanswer
 

Ok merci! :hello:  

n°209131
Toxin
Carpe ★★ Vitam
Posté le 05-09-2002 à 11:17:28  profilanswer
 

Musaran a écrit a écrit :

Non, x est une forme, pas une valeur.
 
On peut initialiser à l'instanciation:

Code :
  1. x ox= {0,1};


 
Maintenant, si tu veux qu'à chaque fois que tu crée un x il soit automatiquement initialisé avec a=0,b=1...
...alors il est temps de passer au C++ qui dispose de constructeurs faits pour ça:

Code :
  1. struct x{
  2. int a;
  3. int b;
  4. x(){
  5.  a=b=0;
  6. }
  7. };






 
Fondamentalement y a t-il une différence entre struct et class, faite par le complo C++ ?


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
n°209208
heffer
PDG du Site des Mains
Posté le 05-09-2002 à 12:29:52  profilanswer
 

toxin> ça doit être une histoire d'encapsulation...
 
Sinon j'ai une autre question.
J'ai toujours ma structure X:
typedef struct  
{int a;  
int b;  
}x;  
 
Et je veux savoir si on peut comparer deux instances de X:
X toto;
X titi;
toto.a=1;
toto.b=2;
titi.a=0;
titi.b=5;
Est-ce qu'on peut faire:
if (toto==titi) {...} :??:


---------------
Découvrez la version 2005 du  Site des Mains!! C'est la même qu'en 2004!
n°209209
antp
Super Administrateur
Champion des excuses bidons
Posté le 05-09-2002 à 12:35:49  profilanswer
 

heffer a écrit a écrit :

toxin> ça doit être une histoire d'encapsulation...




 
par défaut (si on spécifie rien) c'est private dans une classe et public dans une structure, non ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°209210
antp
Super Administrateur
Champion des excuses bidons
Posté le 05-09-2002 à 12:36:12  profilanswer
 

heffer a écrit a écrit :

 
Est-ce qu'on peut faire:
if (toto==titi) {...} :??:  




 
si tu redéfinis l'opérateur ==, oui
sinon, non


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°209211
heffer
PDG du Site des Mains
Posté le 05-09-2002 à 12:37:28  profilanswer
 

antp a écrit a écrit :

 
 
si tu redéfinis l'opérateur ==, oui
sinon, non




 
Ok mais là je travaille en C donc je ne peux pas le redéfinir si?


---------------
Découvrez la version 2005 du  Site des Mains!! C'est la même qu'en 2004!
n°209212
antp
Super Administrateur
Champion des excuses bidons
Posté le 05-09-2002 à 12:41:00  profilanswer
 

je pense pas, en effet :/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°209221
heffer
PDG du Site des Mains
Posté le 05-09-2002 à 13:02:15  profilanswer
 

J'ai encore une autre question (j'ai l'impression d'avoir tout oublié).
Si je veux modifier mon toto, est-ce qu'il vaut mieux passer le pointeur de toto en argument ou retourner un autre X:
 
void modifier (X* toto)
{toto->a=54;}
 
ou
 
X modifier (X toto)
{X temp;
 temp=toto;
 temp.a=54;
 return temp;
}
 :??:  
 


---------------
Découvrez la version 2005 du  Site des Mains!! C'est la même qu'en 2004!
mood
Publicité
Posté le 05-09-2002 à 13:02:15  profilanswer
 

n°209233
darkoli
Le Petit Dinosaure Bleu
Posté le 05-09-2002 à 13:32:48  profilanswer
 

heffer a écrit a écrit :

 
 
Ok mais là je travaille en C donc je ne peux pas le redéfinir si?




Y'a une solution dite à l'arrache :
Ca marche tres bien pour ton exemple !!!
 

Code :
  1. TToto a;
  2. TToto b;
  3. [...]
  4. if (memcmp(a, b, sizeof(TToto) == 0)
  5. {
  6. }


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°209242
darkoli
Le Petit Dinosaure Bleu
Posté le 05-09-2002 à 13:38:05  profilanswer
 

heffer a écrit a écrit :

J'ai encore une autre question (j'ai l'impression d'avoir tout oublié).
Si je veux modifier mon toto, est-ce qu'il vaut mieux passer le pointeur de toto en argument ou retourner un autre X:
 
void modifier (X* toto)
{toto->a=54;}
 
ou
 
X modifier (X toto)
{X temp;
 temp=toto;
 temp.a=54;
 return temp;
}
 :??:  
 




 
Moi dans ce cas là je passe un pointeur sur l'instance de toto en parmetre dans le cas ou je veux modifier les champs. ET je retourne l'etat de l'operation : OK ou ERREUR.
 

Code :
  1. TToto a;
  2. int initialise(void* toto, taille)
  3. {
  4. if (toto == NULL) return ERREUR;
  5. if (taille < 1) return ERREUR;
  6. memset(toto,0, taille);
  7. return OK;
  8. }
  9. if (initialise(&a, sizeof(TToto)) != OK)
  10. {
  11.   fprintf(stderr, ""Y'a une couille.\n" );
  12.   return ou exit ...
  13. }


 


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°209733
Musaran
Cerveaulté
Posté le 06-09-2002 à 02:45:28  profilanswer
 

Toxin a écrit a écrit :

Fondamentalement y a t-il une différence entre struct et class, faite par le complo C++ ?


A part l'histoire du public/private par défaut, C++ ne fait aucune différence entre struct et class.
 

heffer a écrit a écrit :

Et je veux savoir si on peut comparer deux instances de X


Suffisait d'essayer... non, ça marche pas.
On peut faire:

Code :
  1. if( memcmp(&toto,&titi,sizeof(X)== 0) /*identiques*/;

Mais si il y a des trous dans la structure à cause d'alignements, ce n'est pas garanti.
Reste alors une macro:

Code :
  1. #define Xequal(x1,x2) ( (x1).a==(x2).a && (x1).b==(x2).b )


T'as pas envie de passer au C++ où c'est possible ?
 
 

Citation :

Si je veux modifier mon toto, est-ce qu'il vaut mieux passer le pointeur de toto en argument ou retourner un autre X:

Si toto est gros, il est plus rapide de passer par adresse.
Si toto a beaucoup de membres à modifier, il est plus rapide de passer/renvoyer par valeur.
Si la fonction doit servir dans des expressions, il vaut mieux renvoyer par valeur.
Perso, je préfères par adresse (référence en C++).


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°211371
Profil sup​primé
Posté le 09-09-2002 à 22:14:12  answer
 

Musaran a écrit a écrit :

Non, x est une forme, pas une valeur.
 
On peut initialiser à l'instanciation:

Code :
  1. x ox= {0,1};


 
Maintenant, si tu veux qu'à chaque fois que tu crée un x il soit automatiquement initialisé avec a=0,b=1...
...alors il est temps de passer au C++ qui dispose de constructeurs faits pour ça:

Code :
  1. struct x{
  2. int a;
  3. int b;
  4. x(){
  5.  a=b=0;
  6. }
  7. };






 
Pour les gens qui ont fait plus de 2 heures de C++ dans leur vie, ils peuvent mettre x() : a(0), b(1) {}
c'est beaucoup plus elegant, et ca évite d'initialiser 2 fois la valeur.
 
edit : et en passant, a=b=0 c'est pas terrible non plus, c'est même carrément cochon.


Message édité par Profil supprimé le 09-09-2002 à 22:16:00
n°211445
Musaran
Cerveaulté
Posté le 10-09-2002 à 05:30:50  profilanswer
 

Je connais...
Je voulais pas l'effrayer avec un truc incompréhensible :D.
a=b=0, c'est juste la flemme qui m'a pris comme ça...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°1943266
kamola
Posté le 22-11-2009 à 20:28:52  profilanswer
 

comment peut on initialiser une tableau de structure en C
par exemple  
struct text  
{char id[20];
 char pw[20];
};
typdef struct text;
text tableau[100];

n°1943280
Joel F
Real men use unique_ptr
Posté le 22-11-2009 à 21:33:05  profilanswer
 

text tableau[100] = { {"lol","rofl"}, .... , {"test","test} };

n°1943775
kamola
Posté le 23-11-2009 à 22:54:20  profilanswer
 

le strcmpr dans le langage C rutern soit 0 ,1ou bien -1 .dans ce cas
j'ai apple la fonction strcmpr(tableau.id[0],"add" ); il me retourne 1  
 
sachant que tablea.id est initialise :strcpy(tableau.id,"add" );
 
==> normalement la fonction strcmpr doit retouner comme valeur "0"
 
et c'est l'errur que j'arrive pas à trouveeeeeeer
                                                                    merci  

n°1944377
theShockWa​ve
I work at a firm named Koslow
Posté le 25-11-2009 à 12:11:54  profilanswer
 

poste le code qui pose problème directement


---------------
last.fm
n°1945100
kamola
Posté le 26-11-2009 à 20:18:40  profilanswer
 

merci j'ai trouvee l'erreur

n°1945165
kamola
Posté le 27-11-2009 à 01:01:22  profilanswer
 

je veux savoir les fonction predefinie du langage C qui permet de bloquer l'instruction pour une moment  
                         et merciiiiiiii

n°1945251
theShockWa​ve
I work at a firm named Koslow
Posté le 27-11-2009 à 10:42:54  profilanswer
 

kamola a écrit :

je veux savoir les fonction predefinie du langage C qui permet de bloquer l'instruction pour une moment  
                         et merciiiiiiii


 
et en décrypté, tu veux savoir quoi ? [:pingouino]


---------------
last.fm
n°1945309
kamola
Posté le 27-11-2009 à 13:07:15  profilanswer
 

des fonction comme le getch() par exemple qui bloque l'instruction  
par exemple si dans un programme on veut ploquer une instruction pour 2 min comment faire

n°1945333
theShockWa​ve
I work at a firm named Koslow
Posté le 27-11-2009 à 14:09:09  profilanswer
 

si tu veux faire de la temporisation aussi grande, tu demandes à ton os de te mettre en attente (sleep, wait ou autre suivant quelle API tu dois utiliser, ca va varier) comme ca, tu ne consommes pas de ressources inutilement
 
j'ai comme l'impression que tu es sous du windows, donc ce qu'il te faut se trouve là : http://msdn.microsoft.com/en-us/li [...] S.85).aspx
 
Sinon, regarde du côté de la doc des threads posix


---------------
last.fm
n°1951005
kamola
Posté le 16-12-2009 à 19:39:52  profilanswer
 

salam 3alikom  
  les fonctions de la bibliotheque<dos.h> ne marchent sur le dev C++ pk et comment faire pour les etuliser  
  et marci bcp

mood
Publicité
Posté le   profilanswer
 


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

  Peut-on initialiser les champs d'une structure?

 

Sujets relatifs
[PHP-MySQL] Mettre nom des champs dans varialbeAccès aux champs d'un formulaire
[Access] Mise à 0 d'un champs par défautrecherche des informations sur la structure physique des fichiers TIFs
Probleme avec la structure FILE[C++] Ya moyen de sauvegarder d'un seul coup une structure ds un .INI?
[java] equivalent d'un tableau de structure mais en java.[ASP] Récupérer des champs sur plusieurs tables...
Structure des .exeMySQL, Afficher le nom des champs !
Plus de sujets relatifs à : Peut-on initialiser les champs d'une structure?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)