Bonjour à tous,

Je suis en train d'écrire un programme utilisant une structure Date
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
 
#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