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 :

Probleme fscanf qui plante


Sujet :

C

  1. #1
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut Probleme fscanf qui plante
    Bonjour ,

    Je suis débutant en C et j'ai un probleme de lecture d'un fichier dont je connais le formatage (voir ci dessous)

    2
    4
    3
    01100001
    10011011

    les chiffres sont donné a valeur indicative et je connais pas la longueur des lignes binaires avant leur lecture (elle est égale a line*col soit la premiere ligne * la seconde ligne)


    Mon code pour les récupérer avec fscanf est le suivant mais plante a l'execution :

    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
    void lire2(char* fichier){
     
        FILE* file=NULL;
     
        int line, coll, life;
        char* bomb = malloc(sizeof(char)*MAXLINE);
        char* see = malloc(sizeof(char)*MAXLINE);
     
        if ((file = fopen(fichier, "r")) != NULL)
        {
            fscanf(file, "%d%d%d%s%s", line,coll,life,bomb,see);
            fclose(file);
     
        }
        return NULL;
    }
    Si une ame charitable pouvait éclairer ma lanterne je lui serait trés reconnaissant

  2. #2
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(file, "%d%d%d%s%s", line,coll,life,bomb,see);
    ne peut pas marcher, il y a des passages à la ligne dans ton fichier.

    Il vaut mieux que tu procèdes avec fgets : tu lis les lignes une par une. Ensuite, tu interprètes leur contenu avec sscanf.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Comme corentin59 l'a dit, cette ligne ne peut pas marcher :
    Citation Envoyé par IP-Fix Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(file, "%d%d%d%s%s", line,coll,life,bomb,see);
    Tu passes à fscanf la valeur de line, de coll, de life. Vois-tu le problème?

    Quel compilateur utilises-tu? As-tu activé les warnings?

    Je crois personnellement, et je peux me tromper, que scanf ne s'arrête pas à la fin de la ligne, mais quand il a fini de lire tous les paramètres à lire (quand il a atteint la fin de la chaine de format), ou quand se produit une erreur de conversion (tu veux lire un entier et il y a une lettre dans le flux) ou qu'il rencontre la fin de fichier, ou une erreur de lecture du fichier.

  4. #4
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    effectivement, le fscanf ne s'arrête pas à la fin de la ligne. En fait l'erreur venait de l'oubli des & pour les entiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(file, "%d%d%d%s%s",&line,&coll,&life,bomb,see);
    Ceci dit, je pense qu'il est plus sûr d'utiliser le couple fgets-sscanf, notamment pour lire des chaines de caractères sans risquer un débordement.

    Enfin, je ne suis pas au courant de la censure dont tu as pu faire l'objet, ta réponse initiale a dû être enlevée avant que je m'en aperçoive.

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par corrector Voir le message
    scanf ne s'arrête pas à la fin de la ligne, mais quand il a fini de lire tous les paramètres à lire (quand il a atteint la fin de la chaine de format), ou quand se produit une erreur de conversion (tu veux lire un entier et il y a une lettre dans le flux) ou qu'il rencontre la fin de fichier, ou une erreur de lecture du fichier.
    C'est tout a fait exact. Pour citer la norme:
    Citation Envoyé par ISO/IEC 9899:TC2 7.19.6.2
    Input white-space characters (as specified by the isspace function) are skipped, unless the specification includes a [, c, or n specifier.
    et pour isspace():
    Citation Envoyé par ISO/IEC 9899:TC2 7.4.1.10
    The standard white-space characters are the following: space (' '), form feed ('\f'), new-line ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v').
    Ce comportement de fscanf() (et donc de scanf) est tres puissant, ou tres irritant, selon l'utilisation qu'on veut en faire...

  6. #6
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    En effet j'avais zappé les & et les warning par la meme occasion

    Merci à vous pour les explications et avoir remis mon code dans le coté clair de la force

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

Discussions similaires

  1. probleme gestionnaire des tache qui plante
    Par juliobarna dans le forum Windows XP
    Réponses: 6
    Dernier message: 10/07/2008, 11h38
  2. [Novice] Problème avec Eclipse 3.0.x qui plante
    Par esolarc dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2005, 13h22
  3. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50
  4. Pc qui plante
    Par tooms2028 dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 19/03/2005, 17h32
  5. [JTextArea] redessin qui plante
    Par phil_ma dans le forum Composants
    Réponses: 3
    Dernier message: 04/01/2005, 05h19

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