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

  FORUM HardWare.fr
  Programmation
  C

  [C] Remplissage -Résolu-

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Remplissage -Résolu-

n°1475366
Siluro
Posté le 14-11-2006 à 18:05:46  profilanswer
 

Alors admettons que j'ai cette structure suivante :

Code :
  1. typedef struct pers {
  2. int age;
  3. char prenom[30];
  4. }t_pers;


 
Pour remplir une entité t_pers, on peut le faire de deux façons :

Code :
  1. int main() {
  2. t_pers jp = {456,"Jean-Paul"};


Ou de cette façon :

Code :
  1. int main() {
  2. t_pers jp;
  3. ...
  4. ...
  5. jp.age = 456;
  6. strcpy(jp.prenom, "Jean-Pierre" );


 
On est d'accord ? [:autobot]
 
MAIS admettons que ma structure se complique (disons 5 paramètres, des GtkWidget par exemple), et ADMETTONS que je fasse un tableau de structures de t_pers de 15 cases... Selon la 2è façon, il faudrait que je fasse 15 cases * 5 paramètres = 75 lignes de code ? (sachant toutes les informations sont toutes différentes les unes des autres : pas de boucle possible).
 
Bien entendu que non, je souhaite éviter cette méthode. Mais le 1er exemple a l'air plus intéressant... Problème : cette manipulation (avec les accolades) ne marche qu'à l'initialisation des variables. Donc ma question est : comment remplir une entité de structure de plusieurs paramètres en une seule fois (dans le même esprit que la 1ère façon) ?
 
N.B. : Je sais qu'on peut créer une fonction qui, en envoyant les données à insérer en paramètre, irait remplir chaque case du tableau. Mais j'aimerais savoir s'il existe une manip' pour éviter cela. Merciiiiiiiiiiiiiiiiiii !  [:petrus jar]

Message cité 2 fois
Message édité par Siluro le 14-11-2006 à 21:53:05
mood
Publicité
Posté le 14-11-2006 à 18:05:46  profilanswer
 

n°1475377
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-11-2006 à 18:18:57  profilanswer
 

Siluro a écrit :

Alors admettons que j'ai cette structure suivante :

Code :
  1. struct pers {
  2. char nom[30];
  3. char prenom[30];
  4. }t_pers;


 
Pour remplir une entité t_pers, on peut le faire de deux façons :

Code :
  1. int main() {
  2. t_pers jp = {"2 le retour","Jean-Paul"};


Ou de cette façon :

Code :
  1. int main() {
  2. t_pers jp;
  3. ...
  4. ...
  5. jp.nom = "2 le retour";
  6. jp.prenom = "Jean-Paul";


 
On est d'accord ?


 [:arrakys]  
Non. Pour copier des chaines, on utilise strcpy().


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1475384
Siluro
Posté le 14-11-2006 à 18:26:30  profilanswer
 

Ah oui désolé, c'est la mauvaise habitude. Je modifie.

n°1475400
Sve@r
Posté le 14-11-2006 à 19:51:38  profilanswer
 

Siluro a écrit :

Problème : cette manipulation (avec les accolades) ne marche qu'à l'initialisation des variables


Et encore, avec ta structure initiale, même l'initialisation avec des accolades ne marchera pas
Ex:

typedef struct {
    int age;  
    char prenom[30];
}t_pers;  
 
int main()
{
    static t_pers tabStarAc[]={
        {21, "Pierre Jean-Pierre"},
        {19, "Jean Tchang"},
        {19, "Megane"},
        {18, "Yaris"},
        {23, "Vulva"}
    };
}


Le problème c'est que chaque chaîne écrite en "dur" n'est qu'un pointeur vers une zone statique de la mémoire et l'initialisation ne fera que copier ce pointeur dans "tabStarAc".
Pour que ça marche, il faudra que ta structure soit définie ainsi

typedef struct {
    int age;  
    char *prenom;
}t_pers;


 

Siluro a écrit :

... sachant toutes les informations sont toutes différentes les unes des autres : pas de boucle possible....


Si. Tu peux très bien, à partir de mon initialisation, faire une boucle qui copiera chaque membre de "tabStarAc[i]" dans une variable bien à toi...


Message édité par Sve@r le 14-11-2006 à 19:58:10

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1475438
jesus_chri​st
votre nouveau dieu
Posté le 14-11-2006 à 20:51:13  profilanswer
 

l'affectation par accolade hors initialisation a été ajouté en C99 il me semble :
 
typedef struct {  
    int age;    
    char prenom[30];  
}t_pers;  
 
t_pers t;
...
t = (t_pers){ 42, "zozo" };
 
un truc dans le genre...

n°1475443
Siluro
Posté le 14-11-2006 à 21:12:49  profilanswer
 

ooooo jesus
je viens de tester sans réfléchir ton cast. ça fonctionne ! merci
je vais quand même aller regarder ton information dans C99.
Merci à tous, ça va beaucoup m'aider ça !! :hello:


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

  [C] Remplissage -Résolu-

 

Sujets relatifs
[résolu] comment récupérer le nom de la table correspondant [...][Resolu] JScrollPane et JTextArea
[resolu] Probleme de requete sur deux tables[C#/résolu] type template avec méthodes connues par avance
[Résolu] Changer le "body background" en fonction de la résolution[RESOLU] PB avec les virgules et MYSQL ?!
[RESOLU] Flash et Firefox - incompatibilite selective[Résolu] Condition multiple "souple"
[Résolu] Effets CSS non désirés...[RESOLU] Ordre d'execution a la creation dune form ?
Plus de sujets relatifs à : [C] Remplissage -Résolu-


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