Bonjour à tous et à toutes,
Je suis nouvelle sur le forum et débutante en langage C. Je me permets de faire appel à vous car j'aurais besoin de votre aide.
Voilà : je souhaite créer une fonction qui vérifie la validité d'une date codée dans un fichier structure. Ce que j'ai fait, enfin du moins ce que je pensais avoir fait. Cependant, la fonction ne me renvoie pas les valeurs appropriées.
Pourriez-vous m'aiguiller sur les erreurs que j'ai faites ? J'ai beau regarder, je ne comprends pas pourquoi cela ne veut pas fonctionner. Merci d'avance.
Voici le code en question :

Code C : 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
#include <stdio.h>
#include <stdlib.h>
struct date
{
    int j;
    int m;
    int a;
};
struct info
{
    struct date valeur;
};
 
void encode(struct info*date);
void affichestructure(struct info *pinfo);
char fct_ValidDate(int *,int *,int *);
FILE* f_open_file(const char *);
int main()
{
    struct info date;
    FILE *fp;//necessaire pour creer et ecrire dans le fichier
    int ret=0;
 
    printf("new achat\n");
    fp= f_open_file("ab");//ouvre le fichier en lecture
    encode(&date);
    fwrite(&date,sizeof(struct info),1,fp);//ecrire dans fichier
    fclose(fp);//ferme  le fichier
 
    printf("afficher date\n");
    fp= f_open_file("rb");//ouvre le fichier en écriture
    // boucle qui parcours l'ensemble des données de la structure
    while(fread(&date,sizeof(struct info),1,fp)!=0)
    {
        affichestructure(&date);//affiche structureç
    }
    fclose(fp);//ferme  le fichier
    return 0;
}
//definitions fonctions
 
void encode(struct info *date)
{
    int val=0;
    do
    {
        printf("entre la date sous format jj/mm/aaaa: \n");
        fflush(stdin);
        scanf("%d/%d/%d",&(date->valeur.j),&(date->valeur.m),&(date->valeur.a));
        val=fct_ValidDate(&(date->valeur.a),&(date->valeur.m),&(date->valeur.j));
 
 
    }while(val!=1);//pose soucis me demande en boucle de rentrer la date m^me quand valide la fonction ne renvoie que des valeur erronée comme 2686583
 
}
void affichestructure(struct info *pinfo)
{
 
            printf("%d/%d/%d\n",pinfo->valeur);
}
 
FILE * f_open_file(const char *mode)
{
     FILE *fp;
     fp=fopen("plonge.txt",mode);//ecriture dans fichier//ajoute element en fin de fichier
    // fclose(fp);//ferme  le fichier
 
     //si fichier n'existe pas creer et ecris fichier
     if(fp==NULL)
    {
        fp= fopen("plonge.txt","wb");
        fclose(fp);//ferme le fichier
        fp=fopen("plonge.txt","ab");//reouverture
    }
    return fp;
}
//fct_validité date
char fct_ValidDate(int *pjour,int *pmois,int *pannee)
 {
    int jour[]={31,28,31,30,31,30,31,31,30,31,30,31};//jour dans mois=jour[];
    int annee=1583;
    char ret=1;//reception 0 ou 1 selon nonValide, Valide
    int nbrJmois=0;
 
    if(*pannee<annee)
    {
        ret=0;//date non valide
        printf("retA= %d\n",&ret);//affiche une adresse??
    }
 
    if ((*pmois<1)||(*pmois>12))
    {
        ret=0;
 
    }
    else
    {
        // Nombre de jours du mois saisie
        nbrJmois = jour[*pmois-1];
        // Si l'année est bissextile et le mois est février on ajoute un jour
        if((*pannee%4==0)&&(*pannee%400==0)||(*pannee%100!=0)&&(*pmois==2))
        {
                ++ nbrJmois ;
        }
        // Si le jour saisie n'est pas situé entre 1 et le nombre de jour dans le mois
        if((*pjour<1)||(*pjour>nbrJmois))
        {
            ret=0;
           // printf("retJ= %d\n",&ret);//affiche une adresse??
        }
    }
 
    return ret;
 
 }