Bonjour, j'essaye d'apprendre le C avec la formation pour débutant sur Openclassroom. J'essaye d'initialiser une structure comme demander dans le cours mais je ne suis pas parvenu à le faire moi même j'ai t trouvé une solution sur le forum pour écrire une fonction qui initialise ma structure, mais je ne la comprends pas totalement.
Je ne comprends pas pourquoi on doit écrire le 0 dans les crochets après mes variables pourtant cela fonctionne car je pensais que cela voulais dire remplace la première valeur du tableau de caractère par 0. Quelqu'un saurait-il m'expliquer cette fonction ?
car je pensais que cela voulais dire remplace la première valeur du tableau de caractère par 0.
C'est bien ça !
Les chaînes de caractère étant faite avec des tableaux de char et ayant la particularité d'avoir un caractère de fin de chaîne qui est le '\0' (caractère qui a pour valeur 0). Si tu mets le premier caractère de la chaîne à 0, tu en fais une chaîne vide.
Comme on est sur des tableaux destinés à recevoir des chaînes de caractères, j'au plutôt écris :
Ici tu dis que le contenu pointé est égal à un structure de type personne dans laquelle les champs ont pour valeur une chaîne vide pour nom, prénom et adresse et un champ age valant 0.
On peut même en faire une fonction. Ce serait une fonction qui renvoie une structure Personne initialisée avec des valeur par défaut :
Cela te permet, entre autre de centraliser la création d'une valeur par défaut ; du coup si les valeurs par défaut changent ou si tu modifies ta structure, tu n'auras qu'un endroit à modifier dans ton code.
Une technique plus avancée (et un peu plus dangereuse) est d'utiliser une macro :
On commence par définir une simple fonction renvoyant son argument de type structure, la macro donne comme argument un structure par défaut en gérant d'éventuels ajouts :
Je pense avoir compris les deux premières méthode plus modernes mais par contre la troisième avec la macros est un peu au dessus de mon niveau je pense (en tout cas je ne la comprends pas). Pour être sûr que j'ai bien compris la deuxième méthode je vais essayer de l'expliquer étape par étape.
Tu crées une fonction de type Personne qui renvoie une variable de type personne d'ou le
return (Personne);
cette variable est ma Personne de base et je peux y changer les valeurs par défaut si j'en veux d'autres.
J'imagine que le (void) se trouvant après le defaultPersonne veut dire que la fonction n'a pas besoin d'argument.
Ensuite la seconde fonction égale le user à mon profil par défaut.
Par contre, tu me dis que avec la deuxième méthode cela permet de centraliser la création de valeur par défaut, mais c'était déjà le cas avant non ?
Excusez moi d'avance si mes questions sont un peu bêtes...
Cela permet d'initialiser, mais aussi de remettre à 0 à tout moment. Cela me sert aussi de NULL, si une fonction de type SDL_Rect constate un truc qui ne va pas.
SDL_Rect result = CLEAR_RECT,
drawRect = CLEAR_RECT;
....
Après, il n'est pas obligatoire d'initialiser si tu es certain que ta structure va passer à la moulinette. Disons que prendre l'habitude de le faire systématiquement évitera d'oublier le jour où ce sera nécessaire..
Pour les chaînes de char, j'aurais tendance à initialiser avec "Empty string" ou "Vide" ou n'importe quoi qui signifie clairement que le champ n'a pas été traité : Quand tu verras que ton programme n'affiche pas une chaîne, cela permettra de savoir si c'est à cause de la moulinette ou de l'affichage.
En fait il suffit d'initialiser un des membres à 0,
r = (struct Rect){ .x = 0; };
Les autres membres sont mis à 0 / 0. / NULL / whatever.
Ils se sont loupés (oh, incroyable) dans la norme, en ne permettant pas une liste vide d'initialisateurs
r = (struct Rect){}; // pas permis
qui est me semble-t-il une extension gnu.
- Edité par michelbillaud 2 mars 2022 à 8:35:20
Initialisez une structure
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Liens utiles pour le C++
Bonhomme !! | Jeu de plateforme : Prototype.