Probleme en structure

Résolu/Fermé
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 - 2 avril 2008 à 22:42
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 - 3 avril 2008 à 11:46
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

4 réponses

Utilisateur anonyme
2 avril 2008 à 22:52
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
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 1
2 avril 2008 à 22:59
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
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 1
3 avril 2008 à 01:14
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
Utilisateur anonyme
3 avril 2008 à 11:41
Par curiosité, tu utilises quel compilateur ? et comme environnement de développement ?
Tu connais le C++ ?

A bientôt !

Sam.
0
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 1
3 avril 2008 à 11:46
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