[c]mettre des structure ds un tableau

informaticienne -  
 informaticienne -
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
A voir également:

11 réponses

sadektlili Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   4
 
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
informaticienne
 
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
sadektlili Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   4
 
tu ve unt tableau qui contien dans chaque case deux structure : adrese,nom ?
0
informaticienne
 
des structures employé
0

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

Posez votre question
sadektlili Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   4
 
dans chaque case plus qu'une stricture ?
0
informaticienne
 
1ére case du tableau->1ére structure
2éme case du tableau->2éme structure
etc
0
sadektlili Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   4
 
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
informaticienne
 
je ne sais pas comment faire
0
loupius
 
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
loupius
 
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
sadektlili Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   4
 
ok;
je te donne une exp ..................

laisse moi du temp......
0
informaticienne
 
oui merci
0