Probleme en structure

Résolu
abdess111 Messages postés 41 Date d'inscription   Statut Membre -  
abdess111 Messages postés 41 Date d'inscription   Statut Membre -
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. Utilisateur anonyme
     
    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.
    0
  2. abdess111 Messages postés 41 Date d'inscription   Statut Membre 1
     
    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!!!!!!!!!!!!!!!!!!!!!
    0
  3. abdess111 Messages postés 41 Date d'inscription   Statut Membre 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
    0
    1. Utilisateur anonyme
       
      Par curiosité, tu utilises quel compilateur ? et comme environnement de développement ?
      Tu connais le C++ ?

      A bientôt !

      Sam.
      0
  4. abdess111 Messages postés 41 Date d'inscription   Statut Membre 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
    0