Structure, date et pointeurs
nadsky
Messages postés
202
Statut
Membre
-
chuka Messages postés 980 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
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
A voir également:
- Structure, date et pointeurs
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Jm date avis - Forum Consommation & Internet
- Structure d'un rapport de stage - Guide
- Trouver une date de naissance gratuit - Forum Webmastering
- Jm date - Forum Consommation & Internet