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 :

[DEBUTANT] Problème de lecture avec un fscanf


Sujet :

C

  1. #21
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Citation Envoyé par Pingouin
    Le problème vient peut-être des variables de la structure SDL_Rect ..... ça n'a pas l'air d'être des int très communs (je ne connais pas du tout ça) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    typedef struct SDL_Rect {
        Sint16 x, y;
        Uint16 w, h;
    } SDL_Rect;
    Je pense pas. Après qql recherche dans les headers de SDL, tu trouves les déclarations (SDL_stdinc.h) suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef int16_t        Sint16;
    typedef uint16_t    Uint16;
    et ensuite les déclarations (SDL_config_win32.h) suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef signed short int16_t;
    typedef unsigned short uint16_t;
    Mais on sait jamais....

    [EDIT]
    Bingo, tu as raison ! Avec signed short et unsigned short, une valeur sur 2 est convertie.

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    Lol, là c'est vraiment un coup de chance .... mais what is the solution ? ^^ Ne pas utiliser fscanf ni sscanf ?

  3. #23
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Après qql brèves recherches sur fscanf, le format de lecture approprié serait "%hd" et non "%d" seulement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          ret = fscanf(sprite,"%d %hd %hd %hd %hd %hd %hd\n", &choixSprite,
                                                        &position.x, &position.y,
                                                        &partieRestante.w, &partieRestante.h,
                                                        &partieRestante.x, &partieRestante.y);
    Je pense (mais il reste à confirmer) que cela vient de la taille des variables. Un unsigned int = 4 octets, et un unsigned short = 2.

  4. #24
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Pourquoi %hd
    Citation Envoyé par man scanf
    h Indique que la conversion sera de type dioux ou n et que le pointeur suivant est un pointeur sur un short int (plutôt que sur un int).
    Voila, j'espère que cela fonctionne maintenant

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    Youhou tu as raison !!! Ca fonctionne bien avec un %hd.

    Je ne sais pas comment te remercier ... vivent les membres de ce forum !

    J'aimerais juste savoir si tu as certains sites / bases de données en marque page où tu recherches toutes ces infos, ou si .... google est ton ami ^^ ?

    Merci encore !

  6. #26
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Tu as encore trouvé :
    http://www.linux-france.org/article/...3/scanf-3.html

    bye... (n'oublis pas le p'tit bouton )

  7. #27
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Elijha
    Après qql brèves recherches sur fscanf, le format de lecture approprié serait "%hd" et non "%d" seulement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          ret = fscanf(sprite,"%d %hd %hd %hd %hd %hd %hd\n", &choixSprite,
                                                        &position.x, &position.y,
                                                        &partieRestante.w, &partieRestante.h,
                                                        &partieRestante.x, &partieRestante.y);
    Je pense (mais il reste à confirmer) que cela vient de la taille des variables. Un unsigned int = 4 octets, et un unsigned short = 2.
    Je re commande pas du tout cette technique qui n'est pas portable, mais plutôt :
    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
     
       int choixSprite;
       int position_x;
       int position_y;
       int partieRestante_w;
       int partieRestante_h;
       int partieRestante_x;
       int partieRestante_y;
     
       ret = fscanf(int, "%d %d %d %d %d %d %d\n"
                    , &choixSprite
                    , &position_x
                    , &position_y
                    , &partieRestante_w
                    , &partieRestante_h
                    , &partieRestante_x
                    , &partieRestante_y);
     
       if (ret == 7)
       {
          position.x = position_x;
          position.y = position_y;
          partieRestante.w = partieRestante_w;
          partieRestante.h = partieRestante_h;
          partieRestante.x = partieRestante_x;
          partieRestante.y = partieRestante_y;
       }
    Le principe étant de rester indépendant des types dont on a pas la maitrise.

    Le choix de int couvre de façon portable la plage - 32767 à 32767. Si cétait insuffisant, passer en unsigned int ("%u") ou long ("%ld") ou unsigned long ("%lu").

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème de lecture avec les Socket
    Par Kevin12 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 18/03/2009, 15h40
  2. [DEBUTANT]Problème de deployement avec web.xml
    Par kore62 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 06/08/2007, 14h54
  3. Problème de lecture avec un player audio ouvert par SWFobject
    Par ceddus dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/06/2007, 04h47
  4. Réponses: 6
    Dernier message: 12/06/2006, 16h38
  5. [DOM] Problème de lecture avec DOM
    Par samios dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 29/09/2004, 15h58

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