Probleme en structure

Résolu
slt tt le monde
je veux faire un tableau de tructure qui contient par exemple 5 case,dans ces structures ya 3 champ
struct date
{
int jour;
char *moi; ---->pour stocker la chaine de caractere(decembre par exemple
int annee;
}
je veux que la date sra par exemple: 12 avril 2008
je sais pas cest ou lerreur si vous pouvez maider svp
__________________________________________________________________________
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date {
int jour;
char *mois ;
int anne;
};typedef struct date tdate;
main()
{
tdate *toto;
int i;
toto=malloc(5*sizeof(tdate));
toto->mois=malloc(sizeof(char));
for(i=0;i<5;i++)
{
printf("le jour:\t");
scanf("%d",&(toto+i)->jour);
printf("le mois:\t");
gets((toto+i)->mois);
printf("l'annee:\t");
scanf("%d",&(toto+i)->anne);
}
for(i=0;i<5;i++)
printf("%d %s %d\n",(toto+i)->jour,(toto+i)->mois,(toto+i)->anne);
}
___________________________________________________________________________
avec ce code ca marche mais le mois est traité comme un int pas comme chaine

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date {
int jour;
int moi;
int anne;
};typedef struct date tdate;
main()
{
tdate *toto;
int i;
toto=malloc(5*sizeof(tdate));
for(i=0;i<5;i++)
{
printf("le jour:\t");
scanf("%d",&(toto+i)->jour);
printf("le mois:\t");
scanf("%d",&(toto+i)->moi);
printf("l'annee:\t");
scanf("%d",&(toto+i)->anne);
}
for(i=0;i<5;i++)
printf("%d / %d / %d\n",(toto+i)->jour,(toto+i)->moi,(toto+i)->anne);
}
________________________________________________________________________________
merci d'avance
Configuration: Windows XP
Firefox 2.0.0.11

4 réponses

  1. moi je travaille avec visual basic studio parce que je travaille aussi le visual basic.le c++ cest pour lannée prochaine :-)
    aussi le java et le php cest un long programme qui mattend :-)
    allez a bientot
    1. euh jai trouver la 1er erreur cest ke
      pour linsstruction toto->mois=malloc(9*sizeof(char)); je reserve la memoire juste pour le pointeur moi qui se trouve dans la premier case
      il faus ke a chaque fois le i sincumente(passe a la next case je dois reserver la memoire)
      mais bon jai utiliser les tableaux statique cest mieux(rapidite + reserve pas tt la memoire disponible)
      voila le code pour les gens qui sinteraissent
      _____________________________________________
      #include<stdio.h>
      #include<stdlib.h>
      #include<string.h>
      struct date {
      int jour;
      char tab[50];
      int anne;
      };typedef struct date tdate;
      int test()
      {
      int v;
      char c;
      c=getchar();
      printf("voulez vous continuez?(o/n)\t");
      scanf("%c",&c);
      if(c=='o' || c=='O')
      v=1;
      else
      v=0;
      return v;
      }
      main()
      {

      tdate *toto;
      int i,j;
      i=0;
      toto=malloc(sizeof(tdate));
      do
      {
      printf("la date %d:\t",i+1);
      scanf("%d %s %d",&(toto+i)->jour,&(toto+i)->tab,&(toto+i)->anne);
      i++;
      }while(test());
      for(j=0;j<i;j++)
      printf("%d %s %d\n",(toto+j)->jour,(toto+j)->tab,(toto+j)->anne);
      }
      _________________________________
      allez a bientot
      1. Par curiosité, tu utilises quel compilateur ? et comme environnement de développement ?
        Tu connais le C++ ?

        A bientôt !

        Sam.
    2. merci de mavoir repondre
      jai essayer avec celui la
      ____________________________mais tjr ca marche pas
      #include<stdio.h>
      #include<stdlib.h>
      #include<string.h>
      struct date {
      int jour;
      char *mois ;
      int anne;
      };typedef struct date tdate;
      main()
      {
      tdate *toto;
      int i;
      toto=malloc(5*sizeof(tdate));
      toto->mois=malloc(9*sizeof(char));
      for(i=0;i<5;i++)
      {
      printf("le jour:\t");
      scanf("%d",&(toto+i)->jour);
      printf("le mois:\t");
      gets((toto+i)->mois);
      printf("l'annee:\t");
      scanf("%d",&(toto+i)->anne);
      }
      for(i=0;i<5;i++)
      printf("%d %s %d\n",(toto+i)->jour,(toto+i)->mois,(toto+i)->anne);
      }
      _________________________________________________________________________
      et je crois pas que cest le probleme,jai reserver un tabeau infini pr la chaine mois
      et voila jai fais un pti teste avec ce code
      _________________________________________
      #include<stdio.h>
      #include<stdlib.h>
      #include<string.h>
      struct date{
      char *moi;
      };typedef struct date tdate;
      main()
      {
      tdate *toto;
      toto=malloc(3*sizeof(tdate));
      toto->moi=malloc(sizeof(char));

      printf("saisi\t");
      gets(toto->moi);

      printf("%s\n",toto->moi);
      }
      ___________________________________________
      et ca marche!!!!!!!!!!!!!!!!!!!!!
      1. Bonsoir,

        Le champ mois n'est pas initialisé correctement. Tu alloue seulement la taille d'un caractère, cad. 1 octet !
        toto->mois=malloc(sizeof(char));
        Il faudrait par exemple définir une constante pour allouer un nombre de caractères suffisant pour tout mois :
        #define LENGTH_MAX_OF_MONTH 10
        toto->mois=malloc(LENGTH_MAX_OF_MONTH);

        Sam.