[c]mettre des structure ds un tableau

Fermé
informaticienne - 30 déc. 2008 à 22:58
 informaticienne - 30 déc. 2008 à 23:42
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 3 avril 2010 4
30 déc. 2008 à 23:38
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
30 déc. 2008 à 23:42
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 3 avril 2010 4
30 déc. 2008 à 23:06
tu ve unt tableau qui contien dans chaque case deux structure : adrese,nom ?
0
informaticienne
30 déc. 2008 à 23:12
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 3 avril 2010 4
30 déc. 2008 à 23:14
dans chaque case plus qu'une stricture ?
0
informaticienne
30 déc. 2008 à 23:16
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 3 avril 2010 4
30 déc. 2008 à 23:21
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
30 déc. 2008 à 23:23
je ne sais pas comment faire
0
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
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 3 avril 2010 4
30 déc. 2008 à 23:24
ok;
je te donne une exp ..................

laisse moi du temp......
0
informaticienne
30 déc. 2008 à 23:32
oui merci
0