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 :

Fonction de lecture de données et appel dans main


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Par défaut Fonction de lecture de données et appel dans main
    Bonjour

    je cherche à lire trois paramètres (x,y,z) dans un fichier texte qui vont être utilisés par la suite dans main.
    j'ai construit alors une fonction qui permet de lire ces données
    et j'aimerai faire appel dans main à cette fonction et utiliser ainsi les données récupérés à partir du fichier texte:

    dans code.h j'ai défini les différents paramètres de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct {
    float x;
    float y;
    float z;
    } lire_struct;
    je définis la fonction qui permet de lire de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void lire_donnees (lire_struct * lire_Ptr)
    et j'utilise sscanf pour : lire_Ptr.x , lire_Ptr.y et lire_Ptr.z. Tout ça, marche ce que je cherche maint c'est faire appel à cette fonction dans main et utiliser directement x,y et z dans main.

    merci d'avance pour votre aide.

  2. #2
    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 Re: Fonction de lecture de données et appel dans main
    Citation Envoyé par fuitanoi
    <...>
    ce que je cherche maint c'est faire appel à cette fonction dans main et utiliser directement x,y et z dans main.
    Je vois pas bien où est la difficulté. Montre le code qui te pose problème.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Par défaut
    bonjour
    voici 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <cstdlib>
    #include <stdio.h>
     
    using namespace std;
     
     
    struct Lire_Struct
    {
            float x; 
            float y; 
            float z; 
    };
     
    void Lire_Donnees (Lire_Struct );
     
    int main()
    {
     
        Lire_Struct  Lire_Ptr;
        Lire_Donnees (Lire_Ptr);
     
        system("PAUSE");
        return 0;
    }
     
     
    void Lire_Donnees (Lire_Struct  Lire_Ptr)
    {
    FILE* fichier;
    	fichier = fopen("Donnees.txt","rt");
    	int i=1;
    	char ligne[255];
    	float var;
    	if (fichier)
    	{
    		while(fgets(ligne,255,fichier)!=NULL)
    		{
    			    sscanf(ligne,"%f",&Lire_Ptr.x);
    			    fgets(ligne,255,fichier);
                	                                    sscanf(ligne,"%f",&Lire_Ptr.y);
                	                                    fgets(ligne,255,fichier);
                	                                    sscanf(ligne,"%f",&Lire_Ptr.z);
             }
         }  
    }
    ce que je cherche c'est de récupérer x, y et z dans main en faisant appel à la fonction Lire_Donnees, le code tel qu'il est écrit ne reconnait pas Lire_Ptr.x, Lire_Ptr.y, Lire_Ptr.z dans main.

    Ps: mon fichier "donnees.txt" contient les données par exemple de la forme suivante :

    20 x
    40 y
    80 z



    Merci bcp d'avance.

  4. #4
    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
    Pas du C.
    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
     
    ../main.c:13:19: cstdlib: No such file or directory
    ../main.c:16: error: syntax error before "namespace"
    ../main.c:16: warning: type defaults to `int' in declaration of `std'
    ../main.c:16: warning: data definition has no type or storage class
    ../main.c:26: warning: parameter names (without types) in function declaration
    ../main.c: In function `main_':
    ../main.c:29: error: number of arguments doesn't match prototype
    d:/clib/frmwrk/inc/main.h:21: error: prototype declaration
    ../main.c:31: error: `Lire_Struct' undeclared (first use in this function)
    ../main.c:31: error: (Each undeclared identifier is reported only once
    ../main.c:31: error: for each function it appears in.)
    ../main.c:31: error: syntax error before "Lire_Ptr"
    ../main.c:32: error: `Lire_Ptr' undeclared (first use in this function)
     
    ../main.c:34: error: implicit declaration of function `system'
     
    ../main.c:34: warning: nested extern declaration of `system'
    ../main.c: At top level:
    ../main.c:39: error: syntax error before "Lire_Ptr"
    ../main.c:40: warning: function declaration isn't a prototype
    ../main.c: In function `Lire_Donnees':
    ../main.c:50: error: `Lire_Ptr' undeclared (first use in this function)
    ../main.c:43: warning: unused variable `i'
    ../main.c:45: warning: unused variable `var'
    Le forum C++, c'est à coté.

    Traduction en C. Mise au point.
    Pose des questions si tu ne comprends pas...
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    #define FNAME "donnees.txt"
    /* ---------------------------------------------------------------------- */
    #include <stdlib.h>
    #include <stdio.h>
     
    struct Lire_Struct
    {
       float x;
       float y;
       float z;
    };
     
    static int Lire_Donnees (struct Lire_Struct *pLire_Ptr)
    {
       int err = 0;
       FILE *fichier = fopen (FNAME, "r");
     
       if (fichier != NULL)
       {
          int i = 0;
          if (fichier)
          {
             char ligne[256];
             int n = 1;
             while (i < 3 && n == 1 && fgets (ligne, sizeof ligne, fichier) != NULL)
             {
                switch (i)
                {
                case 0:
                   n = sscanf (ligne, "%f", &pLire_Ptr->x);
                   break;
                case 1:
                   n = sscanf (ligne, "%f", &pLire_Ptr->y);
                   break;
                case 2:
                   n = sscanf (ligne, "%f", &pLire_Ptr->z);
                   break;
                }
                i++;
             }
             err = i != 3;
          }
          fclose (fichier);
       }
       else
       {
          perror (FNAME);
          err = 1;
       }
       return err;
    }
     
    int main (int argc, char **argv)
    {
       struct Lire_Struct Lire_Ptr =
       {0};
     
       int err = Lire_Donnees (&Lire_Ptr);
       if (!err)
       {
          printf ("x=%f\n", Lire_Ptr.x);
          printf ("y=%f\n", Lire_Ptr.y);
          printf ("z=%f\n", Lire_Ptr.z);
       }
       else
       {
          printf ("input error\n");
       }
       return 0;
    }
    Avec le fichier
    ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x=12.300000
    y=45.599998
    z=78.900002
    Rappel : les flottants sont une approximation...

  5. #5
    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
    Es-tu sûr de faire du C et non pas du C++ ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <cstdlib> <== C++
    #include <stdio.h> 
     
    using namespace std;  <== C++
    Le mélange peut-être détonnant.
    Ta boucle de lecture fgets est très mal organiséee, tu ne devrais pas avoir d'autre fgets à l'intérieur, sauf si tu es absolument sur de la structure de ton fichier.
    Tu as intérêt à passer une adresse plutôt qu'une structure dans ta fonction.
    "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

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Par défaut
    Merci Emmanuel pour ton aide, je vois plus clair maintenant.

    en fait je ne savais pas qu'il y avait du c++ dans le code, je débute dans le domaine et j'essaie de coller des petits morceaux de codes trouvés sur internet, c'est pê pas la méthode la plus logique, je m'ameliorai avec le temps j'espère

    Pour répondre à ta question Trap D, en fait je suis sur de la structure du fichier c pour ça que j'utilise fgets dans la boucle.

    Merci bcp

  7. #7
    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 fuitanoi
    en fait je ne savais pas qu'il y avait du c++ dans le code,
    "Du code avec des morceaux de C++ dedans"
    je débute dans le domaine et j'essaie de coller des petits morceaux de codes trouvés sur internet, c'est pê pas la méthode la plus logique, je m'ameliorai avec le temps j'espère
    Mauvaise méthode. Le C est un langage difficile qui demande de la rigueur. Je te conseille un bon livre (références sur ce site ou sur le mien) ou un tutoriel comme il y en a sur ce site.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/05/2006, 11h09
  2. [MySQL] lecture de données binaires dans une BDD
    Par Sion_Sempai dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/03/2006, 12h18
  3. Réponses: 5
    Dernier message: 15/09/2005, 14h05
  4. Réponses: 12
    Dernier message: 14/06/2004, 13h06
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

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