Rechercher : dans
Par :

Structure, date et pointeurs

Dernière réponse le 10 nov 2008 à 18:21:29 nadsky, le 10 nov 2008 à 12:35:40 
 Signaler ce message aux modérateurs

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
Nadsky

Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « structure, date et pointeurs » dans :
Gérer les points de restauration Windows ! VoirWindows inclut un système bien connu de restauration du registre à une date antérieure. Cependant, celui-ci a quelques faiblesses : Il est impossible de supprimer un point de restauration en particulier, Il est impossible de savoir ce que le...
[Windows XP] Points de restauration Voir1 - Points de restauration et données personnelles 2 - Vérifier le service 3 - Paramétrer les partitions à restaurer 4 - Remarque 5 - Taille de la sauvegarde et nettoyage 6 - Créer un point de restauration 7 - Restaurer un point de...
Les pointeurs en langage C VoirDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des...
Langage C - Les listes chaînées VoirLa notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...

1

 chuka, le 10 nov 2008 à 18:21:29

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!!
@+ Sur un malentendu, ca peut marcher!!

Répondre à chuka