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 avec fseek


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut problème avec fseek
    Bonjou, voilà j'ai un fichier disposé de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0,060000
    0,100000
    0,010000
    0,050000
    0,050000
    0,060000
    je cherche à rentrer chacune de ces valeurs dans des variables internes, j'ai créé unz structure comme celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct { float chargemanger;
                     float chargeasso;
                     float chargeetude;
                     float chargemuscu;
                     float chargedormir;
                     float chargedouche;
                     } CHARGE;

    et je réalise ceci pour extraire les valeurs du fichier :

    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
    const gchar* chemin;
    FILE *f;
    char type[255] ="";
    CHARGE charge;
     
     
        /* Récupération des données */
     
     
    sprintf(type,"%s",chemin);
    f = fopen(type, "w+");
     
     
    if(f != NULL) {  
    fseek ( f, 0 , SEEK_SET );
    fscanf(f, "%f", &charge.chargemanger);
    fseek ( f , 10 , SEEK_SET );
    fscanf(f, "%f", &charge.chargeasso);
    fseek ( f , 20 , SEEK_SET );
    fscanf(f, "%f", &charge.chargemuscu);
    fseek ( f , 30 , SEEK_SET );
    fscanf(f, "%f", &charge.chargeetude);
    fseek ( f , 40 , SEEK_SET );
    fscanf(f, "%f", &charge.chargedormir);
    fseek ( f , 50 , SEEK_SET );
    fscanf(f, "%f", &charge.chargedouche);
     
     
    else {
        /* échec à l'ouverture */
        perror(type);
    }
     
    fclose(f);
    Le programme compile mais il ne se passe rien quand je veux récupérer les données.

    je réalise un jeu et cette partie de code me permet de charger une partie en cours c'est valeur sont implantées dans des progressbar (GTK),exemple ici de la progressbar dormir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void
    on_ouvrir_activate_dormir                   (GtkMenuItem     *menuitem,
                                            gpointer         user_data)
    {
    CHARGE charge;
     
     
    gtk_progress_set_value(GTK_PROGRESS((GtkWidget*)user_data), charge.chargedouche); //On charge la valeur de la progressbar
    }

  2. #2
    Expert confirmé
    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
    Par défaut
    1- L'option d'ouverture w+ ne convient pas. Voir l'option "r" ( ou "rb")pour lire le fichier.



    2- Se poser la question de savoir si le fichier est un fichier texte ou un fichier "binaire" :
    L'utilisation de fscanf implique qu'il s'agit d'un fichier texte.

    Si c'est le cas, l'utilisation de fseek est strictement "réglementée" :

    - la position de référence doit être SEEK_SET (c'est ton cas)

    - la postion relative doit être 0 ou une valeur retournée par un appel à ftell() (ce qui n'est pas ton cas)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    Pas besoin de mettre ftell(), je connais la position des infos en octets, non?

  4. #4
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par Chibarde Voir le message
    Pas besoin de mettre ftell(), je connais la position des infos en octets, non?
    Non. Si c'est un fichier texte, non. (ne serait-ce que parce que tu ne sais pas sur combien d'octets est codée la fin de ligne)
    En plus, dans ce cas, fseek n'est absolument pas nécessaire : quand tu as lu une donnée, le fichier (FILE) est "positionné" pour lire la donnée suivante.

Discussions similaires

  1. problème avec fseek dans c++ builder
    Par anissben dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/10/2010, 09h08
  2. probléme avec fread et/ou fseek
    Par doumo dans le forum MATLAB
    Réponses: 16
    Dernier message: 22/12/2008, 17h15
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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