Structure, date et pointeurs

nadsky Messages postés 202 Statut Membre -  
chuka Messages postés 980 Statut Membre -
Bonjour,

Je suis en train d'écrire un programme utilisant une structure Date
Code :

typedef struct Date Date; // On définit un nouveau type date
struct Date {
int jour;
int mois;
int an;
};

et je souhaite saisir une date; donc une année, un mois et un jour, en m'assurant de la validité de la date pour le mois de février (entre le 1 et le 29) si l'année est bissextile.

Pour cela, j'avais (dans un précédent projet)crée 2 fonctions, permettant de contrôler la saisie.

Voici mon code :

#include <stdio.h>

// Structure
typedef struct Date Date; // On définit un nouveau type date
struct Date {
int jour;
int mois;
int an;
};

// Prototypage des fonctions
int SaisirEntierMinMax(int, int);
int SaisirEntier();
void SaisirDate(Date *d);
int SaisirAnnee();
int SaisirMois();
int SaisirJour(Date *d);
int estBissextile (int);

// Main
void main()
{
Date *date = NULL;

SaisirDate(&date);

}

// Fonction
int SaisirEntierMinMax(int Min, int Max)
{

int nb;

// Saisie d'un nombre
do
{
nb=SaisirEntier();
if (nb<Min)
{
printf("La valeur est inferieure au minimum \n");
}
else
{
if (nb>Max)
{
printf("La valeur est superieure au maximum \n");
}
}
}
while ((nb<Min) || (nb>Max));

return nb;
}

int SaisirEntier()
{
int n=0;
int r=0;

do
{
r=scanf("%d", &n);
if (r==0)
{
printf("Saisie fausse \n");
// Libère le buffer - Libère la mémoire de la variable
scanf("%*s");
}
}
while (r==0);

return n;

}

void SaisirDate(Date *d)
{
// Saisie de l'année
printf("Saisir l'an \n");
d->an = SaisirAnnee();

// Saisie du mois
printf("Saisir le mois \n");
d->mois = SaisirMois();

// Saisie du jour
printf("Saisir le jour \n");
d->jour = SaisirJour(&d);

printf ("la date est :%d",d->jour,"%d",d->mois,"%d",d->an);
}

int SaisirAnnee()
{
int an;
an=SaisirEntier();
return an;
}

int SaisirMois()
{
int mois;
mois=SaisirEntierMinMax(1,12);
return mois;
}

int SaisirJour(Date *d)
{
int jour;
int an;
int mois;

an=d->an;
mois=d->mois;

if(estBissextile(an)==1){
if(mois==2){
jour = SaisirEntierMinMax(1,29);
}
}
if(estBissextile(an)==0){
if(mois==2){
jour = SaisirEntierMinMax(1,28);
}
else {
jour = SaisirEntierMinMax(1,31);
}
}
return jour;
}

int estBissextile (int an){
int oui = 1;
int non = 0;

if (an%4==0){
return oui;
}
else{
return non;

}
}

En fait, je n'ai pas d'erreur à la compilation, seulement, lorsque je lance l'exécution : on me propose de saisir l'année et le mois, mais ça ne fonctionne pas pour le jour...
Je pense que c'est lié aux pointeurs...

Pouvez-vous m'aider, s'il vous plait?

Merci d'avance

1 réponse

chuka Messages postés 980 Statut Membre 378
 
Salut,
essaye:
void main()
{
Date *date = (Date*)malloc(sizeof(Date));
SaisirDate(date);
}
et
// Saisie du jour
printf("Saisir le jour \n");
d->jour = SaisirJour(d);

J'espere ca pourra t'aider!!
@+
0