[c]mettre des structure ds un tableau

Bonjour,
j'aimerais savoir comment mettre plusieurs structures dans un tableau.
voici mon programme.
#include <iostream>
#define nmax 30
typedef char chaine[nmax];
typedef enum{homme,femme}sexe;
typedef enum{libere,exempte,reforme,incorporable}sit_mit;
typedef union{sit_mit sitmit;
chaine nomjf;}complement;
typedef struct adresse{
unsigned int num;
chaine rue;
unsigned int code;
chaine localite;
}adresse;
typedef struct employe{
chaine nom;
chaine prenom;
sexe sex;
complement comp;
adresse ad;
}employe;

void saisie_structure(){
int s,m;
employe *emp;
emp=(employe*)malloc(sizeof(employe*));
printf("taper le nom\n");
gets(emp->nom);
printf("taper le prenom\n");
gets(emp->prenom);
printf("taper %d pour homme et %d pour femme\n",0,1);
scanf("%d",&s);
while ((s!=0)&&(s!=1)){
printf("taper %d pour homme et %d pour femme\n",0,1);
scanf("%d",&s);
}
switch(s){
case 0:emp->sex=homme;
break;
case 1:emp->sex=femme;
}
if (emp->sex==femme){
printf("taper le nom de jeune fille\n");
gets(emp->comp.nomjf);
}
else
printf("taper la situation militaire:taper un pour libere,deux pour exempte,trois pour reforme et quatre pour incorporable\n");
scanf("%d",&m);
fflush(stdin);
switch(m){
case 0:emp->comp.sitmit=libere;
break;
case 1:emp->comp.sitmit=exempte;
break;
case 3:emp->comp.sitmit=reforme;
break;
case 4:emp->comp.sitmit=incorporable;
break;
}
printf("taper votre adresse\n");
printf("taper le numero de la rue\n");
scanf("%ud",&emp->ad.num);
fflush(stdin);
printf("taper le nom de la rue\n");
gets(emp->ad.rue);
printf("taper le code postale");
scanf("%ud",&emp->ad.code);
fflush(stdin);
printf("taper la localite\n");
gets(emp->ad.localite);
}

int main(){
int n,i;
employe tab[30];
printf("taper le nombre de personnes\n");
scanf("%d",&n);
fflush (stdin);
for(i=0;i<n;i++){
saisie_structure();

}

}
merci
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. tu ve unt tableau qui contien dans chaque case deux structure : adrese,nom ?
    0
    1. des structures employé
      0
      1. dans chaque case plus qu'une stricture ?
        0
        1. 1ére case du tableau->1ére structure
          2éme case du tableau->2éme structure
          etc
          0
          1. tu ne peut pas cas si tu declare une tableau tout les cas de ce tableau est de meme type.
            mais tu peut faire une tableau de stucture dans tuot les case 3 strecture.......
            0
            1. je ne sais pas comment faire
              0
              1. L'indentation n'existant pas, je n'ai pas pris la peine de tout détailler.
                L'art de la programmation est de faire quelque chose qui marche, mais il est inutile d'en rajouter des km car ensuite il est plus difficile de trouver les erreurs.
                Exemple
                printf ("taper %d pour homme et %d pour femme\n",0,1);
                scanf ("%d",&s);
                
                switch(s)
                {
                  case 0:
                    emp->sex=homme;
                    break;
                  case 1:
                    emp->sex=femme;
                }
                if (emp->sex==femme)
                {
                  printf ("taper le nom de jeune fille\n");
                  gets (emp->comp.nomjf);
                }
                else
                {
                  printf("taper la situation militaire:taper un pour libere,deux pour exempte,trois pour reforme et quatre pour incorporable\n");
                  scanf("%d",&m);
                  fflush(stdin);
                  switch(m)
                  {
                    case 0:
                      emp->comp.sitmit=libere;
                      break;
                    case 1:
                      emp->comp.sitmit=exempte;
                      break;
                    case 3:
                      emp->comp.sitmit=reforme;
                      break;
                    case 4:
                      emp->comp.sitmit=incorporable;
                      break;
                  }
                }

                devient
                printf ("Taper %d pour homme et %d pour femme\n", 0, 1);
                scanf ("%d", &s);
                
                emp->sex = s;  // Il serait bon de traiter l'erreur de saisie si != 0 et != 1
                
                if (emp->sex==femme)
                {
                  printf (Taper le nom de jeune fille\n");
                  gets (emp->comp.nomjf);
                }
                else
                {
                  printf  ("Taper la situation militaire:taper un pour libere,deux pour exempte,trois pour reforme et quatre pour incorporable\n");
                  scanf ("%d", &m);
                  fflush (stdin);
                  emp->comp.sitmit = m-1;  // Il serait bon de traiter l'erreur de saisie si != 1 et != 2 et != 3 et != 4
                }

                Ne pas oublier de traiter les erreurs de saisie, c'est très très important.
                0
                1. A la place de "emp->sex = s;" mettre "emp->sex = s - '0';"
                  A la place de "emp->comp.sitmit = m-1;" mettre "emp->comp.sitmit = m - '1';"
                  Mille excuses.
                  Et puis:
                  printf ("Taper %d pour homme et %d pour femme\n", 0, 1);
                  peut avantageusement se remplacer par:
                  printf ("Taper'0' pour homme et '1' pour femme\n");
                  0
              2. ok;
                je te donne une exp ..................

                laisse moi du temp......
                0
                1. tout les structur qui tu a fais ne change pas mais tu ajoute une autre structure de pointeur comme ca :

                  struct point
                  {
                  adresse ad;
                  employe eml;
                  complement comp;
                  };
                  typedef struct point pointeur;

                  //pour declare le tableau

                  pointeur tab[30];
                  //pour aller a la nom de emplayer par exemple

                  tab[i].eml.nom
                  1
                  1. et comme ca c'est juste?
                    #include <iostream>
                    #define nmax 30
                    typedef char chaine[nmax];
                    typedef enum{homme,femme}sexe;
                    typedef enum{libere,exempte,reforme,incorporable}sit_mit;
                    typedef union{sit_mit sitmit;
                    chaine nomjf;}complement;
                    typedef struct adresse{
                    unsigned int num;
                    chaine rue;
                    unsigned int code;
                    chaine localite;
                    }adresse;
                    typedef struct employe{
                    chaine nom;
                    chaine prenom;
                    sexe sex;
                    complement comp;
                    adresse ad;
                    }employe;

                    void saisie_structure( employe emp[]){
                    int s,m;
                    printf("taper le nom\n");
                    gets(emp->nom);
                    printf("taper le prenom\n");
                    gets(emp->prenom);
                    printf("taper %d pour homme et %d pour femme\n",0,1);
                    scanf("%d",&s);
                    while ((s!=0)&&(s!=1)){
                    printf("taper %d pour homme et %d pour femme\n",0,1);
                    scanf("%d",&s);
                    }
                    switch(s){
                    case 0:emp->sex=homme;
                    break;
                    case 1:emp->sex=femme;
                    }
                    if (emp->sex==femme){
                    printf("taper le nom de jeune fille\n");
                    gets(emp->comp.nomjf);
                    }
                    else
                    printf("taper la situation militaire:taper un pour libere,deux pour exempte,trois pour reforme et quatre pour incorporable\n");
                    scanf("%d",&m);
                    fflush(stdin);
                    switch(m){
                    case 0:emp->comp.sitmit=libere;
                    break;
                    case 1:emp->comp.sitmit=exempte;
                    break;
                    case 3:emp->comp.sitmit=reforme;
                    break;
                    case 4:emp->comp.sitmit=incorporable;
                    break;
                    }
                    printf("taper votre adresse\n");
                    printf("taper le numero de la rue\n");
                    scanf("%ud",&emp->ad.num);
                    fflush(stdin);
                    printf("taper le nom de la rue\n");
                    gets(emp->ad.rue);
                    printf("taper le code postale");
                    scanf("%ud",&emp->ad.code);
                    fflush(stdin);
                    printf("taper la localite\n");
                    gets(emp->ad.localite);
                    }

                    int main(){
                    int n,i;
                    employe emp[30];
                    printf("taper le nombre de personnes\n");
                    scanf("%d",&n);
                    fflush (stdin);
                    for(i=0;i<n;i++){
                    saisie_structure(emp);
                    }

                    }
                    1