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 :

fscanf se perd dans mon fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut fscanf se perd dans mon fichier
    bonjour et bonne année à tous.
    je cherche à lire un fichier contenant successivement : 1 file de typeC (consultation , 4 valeurs) puis 1 file de typeO (ordonnance, n doublets de 2 valeurs) puis de nouveau une typeC puis typeO , C , O , ....
    le fichier est joint : 123.txt
    je fais cela avec une boucle sur typeC qui imbrique une boucle sur typeO , dans la fonction load_file du programme joint : 2.c

    en gros j utilise les deux lignes suivantes chacune dans sa boucle :
    ...
    fscanf (LeFichierClient,"\n%d\t%d\t%d\t%s",&jj,&mm,&aa,mal);
    ...
    fscanf (LeFichierClient,"\t%s\t%d\t%d\t%s",&med,&qte)
    ...

    j ai pris comme test pour passer de la fileC à la fileO le doublet =(!,0).

    resultat :
    1 ere fileO : ok
    1 ere fileC (de serie1) : ok
    2 em OK .... n eme OK
    2 em fileO : pas ok
    1 ere fileC (de serie2) : pas OK
    2 em : OK ... n eme : OK

    si quelqun peut regarder mon algorithme et voir ou ca cloche ca me dépannerait bien. Il faut que je rende le programme dans une semaine.

    d avance merci
    Fichiers attachés Fichiers attachés
    • Type de fichier : c 2.c (12,8 Ko, 67 affichages)
    • Type de fichier : txt 123.txt (83 octets, 81 affichages)

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Je n'ai pas tout lu, loins de la, mais j'ai remarqué ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    char*  lire_num_insee (){
     
           char *destination = calloc (1,sizeof(*destination));
           char num_insee[11]="123";
           printf("Entrezzzzzz le numero INSEE du patient: \n");
    /*>>>>>>>>>>>>>>>>>>>>>>scanf("%s", num_insee);*/
           printf("le num_insee est : %s \n", num_insee);
           strcpy (destination,num_insee);
           strncat (destination,".txt",4);
           printf("le fichier du patient correspondant est %s\n",destination);
     
    return destination;
    }
    D'après ton allocation, destiantion est un pointeur vers un tableau de .... 1 caractère, donc lorsque tu recopies num_insee tu as un débordement de mémoire qui va provoquer un comportement imprévisible du programme, en clair il va peut-être focntionner correctement 9 fois sur 10 et la 10 ème fois (en général le jour de la présentation du programme) il plantera.
    On peut faire comme ceci :
    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
    char*  lire_num_insee (){
     
           char *destination = calloc (1,sizeof(*destination));
           char num_insee[11]="123";
           printf("Entrezzzzzz le numero INSEE du patient: \n");
    /*>>>>>>>>>>>>>>>>>>>>>>scanf("%s", num_insee);*/
           printf("le num_insee est : %s \n", num_insee);
           destination = malloc (strlen(num_insee) + 4 + 1);
           // + 4 pour ".txt" +1 pour le zéro terminal des chaines
           if (destination == NULL) // toujours tester le retour de malloc
           {
               // a toi de voir ce que tu veux faire
           }
           else
           {
               strcpy (destination,num_insee);
               strcat (destination,".txt",);
               printf("le fichier du patient correspondant est %s\n",destination);
           }
         return destination;
    }
    Il y a peut-être d'autres erreurs. Corrige au moins celle-ci.
    Tu utilises le Xscanf, c'est déconseillé car les scanf sont très difficiles d'utilisation, utilise plutôt fgets(buf, sizeof but, file_à_lire) suivi d'un traitement de la chaîne lue.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre confirmé
    Profil pro
    responsable de développement
    Inscrit en
    Février 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : responsable de développement

    Informations forums :
    Inscription : Février 2006
    Messages : 26
    Par défaut sscanf...
    Salut,
    dans
    scanf (LeFichierClient,"\t%s\t%d\t%d\t%s",&med,&qte)
    il y a quatre valeurs a scanner dans le format, et seulement deux en paramètre ?
    De plus on voie un &med associer a un %s, il devrais y avoir med ????

    Sinon fscanf retourne le nombre de champ lut, c'est elle avec feof qui devrais piloter la sortie de la boucle non ?

    Bonne continuation...& Bonne année

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Par défaut merci akoril
    quel etourdi je fais. ca marche !!! kisss et bonne annee. vous etes les meilleurs !
    pour Trap : je ne sais pas trop comment corriger selon tes explications vu que c est mon collegue qui a programmé cette partie ...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/05/2006, 17h33
  2. Réponses: 7
    Dernier message: 25/01/2006, 21h37
  3. lecture d'éléments dans mon fichier
    Par gillou4 dans le forum C
    Réponses: 9
    Dernier message: 23/10/2005, 16h19
  4. Saut de ligne dans mon fichier?
    Par cchampion2fr dans le forum Access
    Réponses: 1
    Dernier message: 14/09/2005, 16h22
  5. __declspec(dllexport) dans mon fichier header mais...?
    Par Jasmine dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 03/03/2004, 18h00

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