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 :

problème lecture fichier avec structures de données


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 25
    Points : 27
    Points
    27
    Par défaut problème lecture fichier avec structures de données
    salut tous,

    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
     void afficherlisteprescription()
    {
        FILE *f;
        FILE *f1;
        patient p ;
       char chemin[]="/home/3omda/gestionpatient.txt";
        char c, c1[256];
        char nom[256] , prenom[256];
        int telephone;
        char cheminpr[]="/home/3omda/";
         char ext[]=".txt",tel[256];
    
        printf(" donner le nom de patient : \n ");
        clean_stdin();
        scanf("%s",nom);
        printf(" donner le prenom de patient : \n ");
        clean_stdin();
        scanf("%s",prenom);
        printf(" donner le numero de telephone : \n ");
        clean_stdin();
        scanf("%d",&telephone);
        strcat(cheminpr,nom);
        strcat(cheminpr,prenom);
        sprintf(tel,"%d",telephone);
        strcat(cheminpr,tel);
        strcat(cheminpr,ext);
    
        f=fopen(chemin,"r");
    
        if(f==NULL)
        {
        printf("erreur ouverture de fichier %s \n ",chemin);
        }
        int exist=0;
        while (fscanf(f,"%s  %s  %d  %d  %s  %d  %d  %d  %d  %d  %d \n",p.nom,p.prenom,&p.telephone,&p.age,p.adresse,&p.rendezvous,&p.annee,&p.mois,&p.jour,&p.heure,&p.minute)!=EOF)
       {
      if ((p.telephone==telephone))
       {
        printf(" le patient existe \n ");
         exist=1;
       }
     }
        fclose(f);
    
         if (exist==0)
         {
             printf(" erreur le patient n'existe pas !!!! \n ");
         }
         else
         {
         f1=fopen(cheminpr,"r");
        if(f1==NULL)
        {
        printf("erreur ouverture de fichier %s \n ",cheminpr);
        printf("le patient n'existe pas !!! \n");
        }
        while(c!=EOF)
        {
        c=fgetc(f1);
        printf("%c",c);
        }
        fclose(f1);
        }
          printf("\n\n\n appuyer sur une lettre pour retourner au menu: ");
        clean_stdin();
        scanf("%s",c1);
    }

    dans le cadre d'un mini projet : gestion cabinet medicale je voudrais afficher la liste de prescriptions pour chaque patient donnée
    bon le programme compile nickel mais l'execution non !!!!

    En effet après la saisie de nom prenom et telephone, j'ouvre le fichier gestionpatient.txt pour que je me rassure que le patient exist bien mais il paraît que le compilateur n'interprete pas la condition donnée sachant que presque la même condition fonctionne correctement dans d'autres fonctions !!!!!

    L'exécution me retourne toujours une erreur de la part de la boucle if (exist==0) car la variable exist contient toujours la valeur 0, la condition (p.telephone==telephone)(qui est premordiale pour vérifier l'unicité du patient avec son numero de telephone ) n'est pas interpretée par le compilateur tant dis que si je la remplace avec un (strcmp(p.nom,nom)== 0) le pgm marche nickel !!!!!!!!!!

    de l'aide SVP !!!!!!!!!

    NB: j'opère sur fedora 18

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Le programme est en faute ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        char cheminpr[]="/home/3omda/";
      ...
        strcat(cheminpr,nom);
    Le tableau cheminpr est dimensionné pour pouvoir contenir la chaine "/home/3omda/";
    Il n'est donc pas possible de faire un strcat() dessus vu qu'il n'y a pas de place dans le tableau pour allonger la chaine.

    A partir de ce strcat(), le comportement du programme est totalement imprévisible et il doit être considéré comme détruit.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 25
    Points : 27
    Points
    27
    Par défaut
    yepppp

    thanksss

    diogene

    ça marche nickel après modification de taille de la variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      char cheminpr[256]="/home/3omda/";
    un graaaaaannd merci de tout mon coeur

  4. #4
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    L'une des solutions serait de strdup ton cheminpr, puis de realloc avec la taille précédente (strlen) + la taille du champs que tu ajoutes (strlen aussi...), puis tu strcat !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

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

Discussions similaires

  1. Problème lecture fichier avec fscanf
    Par hypto dans le forum C
    Réponses: 7
    Dernier message: 18/11/2013, 16h57
  2. Problème lecture fichier en redirection avec foreach
    Par nicnictout dans le forum Langage
    Réponses: 25
    Dernier message: 07/01/2011, 16h11
  3. Réponses: 2
    Dernier message: 23/06/2009, 08h42
  4. Problème de lecture fichier avec std::getline
    Par marcootz dans le forum C++Builder
    Réponses: 13
    Dernier message: 15/05/2008, 15h42
  5. Problème lecture fichier avec >>
    Par C1rcus dans le forum C++
    Réponses: 2
    Dernier message: 18/11/2007, 18h19

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