IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Vérification de la validité d'une date codée dans une structure


Sujet :

C

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Vérification de la validité d'une date codée dans une structure
    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;
     
     }

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut


    Décris précisément la disparité entre le résultat et/ou comportement escompté et celui obtenu dans ton énoncé. J'ai bien vu que tu avais ajouté des informations au sein des commentaires, mais il faut déjà lire et comprendre le code pour y avoir accès.

    D'une manière générale essaie de développer de manière plus incrémentale : programme, teste puis valide chaque fonction une par une avant de l'intégrer au programme. Par exemple : assure-toi du bon fonctionnement de ta fonction de validation de date avec des valeurs entrées en dur, puis ajoute la saisie utilisateur, puis ajoute les entrées / sorties sur fichiers, etc..

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 6
    Points
    6
    Par défaut réponse Matt_Houston
    Merci beaucoup pour ta réponse je vais suivre tes conseils de ce pas !bon dimanche

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Points : 6
    Points
    6
    Par défaut merci
    Citation Envoyé par Matt_Houston Voir le message


    Décris précisément la disparité entre le résultat et/ou comportement escompté et celui obtenu dans ton énoncé. J'ai bien vu que tu avais ajouté des informations au sein des commentaires, mais il faut déjà lire et comprendre le code pour y avoir accès.

    D'une manière générale essaie de développer de manière plus incrémentale : programme, teste puis valide chaque fonction une par une avant de l'intégrer au programme. Par exemple : assure-toi du bon fonctionnement de ta fonction de validation de date avec des valeurs entrées en dur, puis ajoute la saisie utilisateur, puis ajoute les entrées / sorties sur fichiers, etc..


    je vous remercie pour vos conseils avisés car j'ai tout repris depuis le début et j'ai résolut mon problème merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  2. Réponses: 2
    Dernier message: 21/03/2007, 16h06
  3. Réponses: 14
    Dernier message: 09/01/2007, 16h19
  4. Réponses: 15
    Dernier message: 03/11/2005, 15h43
  5. [Date] création d'une date à envoyer dans mySql
    Par michaelbob dans le forum JDBC
    Réponses: 4
    Dernier message: 15/09/2005, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo