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 :

afficher des nombres entiers depuis un fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 52
    Points : 29
    Points
    29
    Par défaut afficher des nombres entiers depuis un fichier
    Bonjour

    Alors, je rencontre une difficulté pour afficher des nombres entier se situant dans un fichier texte. La valeur retourné est "0,0" alors qu'elle devrait être de "15,1". A moins d'avoir mal compté, le curseur devrait se trouver juste devant l'entier lors de la lecture du fichier.

    Le fichier texte :
    //color

    text " 15 "
    background " 1 "
    le code :
    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
     
    FILE* fichier = NULL;
       int color[2] = {0}; 
     
       fichier = fopen("cfg/system/color_win32.cfg", "r");
     
        if (fichier != NULL)
        {
            fseek(fichier, 15, SEEK_SET);
            fscanf(fichier, "%d", &color[0]);
            fseek(fichier, 32, SEEK_SET);
            fscanf(fichier, "%d", &color[1]);
            printf("%d,%d", color[0], color[1]);
     
            fclose(fichier);
        }
    Merci.

  2. #2
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    A mon avis faire des fseek est une très mauvaise idée, tu devrais plutôt utilier le fait que tes chiffres sont entre guillemets avec qqch du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while(fgetc(fichier)!='\"');
    fscanf(fichier, "%d", &color[0]);
    while(fgetc(fichier)!='\"'); //on prend la fermeture de guillemets
    while(fgetc(fichier)!='\"');
    fscanf(fichier, "%d", &color[1]);
    printf("%d,%d", color[0], color[1]);
    Et ton code ne marche pas car tu oublies certains sauts de lignes dans ton décompte

  3. #3
    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
    Comme le dit quetzacoatl, utiliser fseek() de cette façon est un mauvaise idée :

    Avec des fichiers texte, le deuxième argument de la fonction fseek() doit être 0 ou une valeur retournée par ftell() (et le troisième argument doit être SEEK_SET)

  4. #4
    Membre habitué

    Homme Profil pro
    Developpeur
    Inscrit en
    Mars 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mars 2011
    Messages : 115
    Points : 188
    Points
    188
    Par défaut
    sinon, pourquoi n'est pas utiliser la fonction getc puis faire des testes pour extraires les données, faire des atoi().... pour la converion

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Code C : 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
     
       int color[2] = {0}; 
       char Ligne[100] ;
       char *p, *p1 ;
       int i =0;
     
       fichier = fopen("cfg/system/color_win32.cfg", "r");
     
        if (fichier != NULL)
        {
            while ( fgets ( Ligne, 100, fichier) != NULL )
               {
                     if ( (p = strchr ( Ligne, '"')) != NULL )
                       {
                           p1 = strchr ( p+1, '"') ;
                           *p1 = '\0' ;
                           sscanf ( p+1, "%d", &(color[i]) );
                           i++ ;
                       }
               }
     
            fclose(fichier);
        }


    PS: d'autre part, dans ton code d'origine, fais bien attention aux parenthèses et aux ordres de précédence : tu met &color[1], pas focrment la même chose que &(color[1]) ...

Discussions similaires

  1. [XL-2003] Ne pas afficher décimales des nombres entiers
    Par NikoBe dans le forum Excel
    Réponses: 25
    Dernier message: 23/10/2023, 12h18
  2. [JavaScript] [SRC] afficher des nombres en toutes lettres
    Par javatwister dans le forum Contribuez
    Réponses: 2
    Dernier message: 07/09/2007, 14h23
  3. total des nombres générés dans un fichier.xls?
    Par loukoulouk dans le forum Modules
    Réponses: 4
    Dernier message: 22/06/2006, 12h22
  4. Format des nombres entiers, séparateurs de milliers
    Par zazaraignée dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2005, 02h25
  5. [SGBD] MySQL:Probleme lorsque je evux afficher des nombres
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 16/10/2005, 01h59

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