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 :

Utilisation de fichiers avec une structure


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Utilisation de fichiers avec une structure
    Salut à tous,

    Alors l'endroit où je bug dans mon programme, c'est pour liée une structure avec un fichier :
    je remplie ma structure, mais je ne sais pas comment l'envoyer dans le fichier, donc j'aimerai savoir où je peux trouver une aide complète sur les fichiers, car google est à bout sur le sujet

    Merci de votre aide

  2. #2
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Citation Envoyé par showdown
    Salut à tous,

    Alors l'endroit où je bug dans mon programme, c'est pour liée une structure avec un fichier :
    je remplie ma structure, mais je ne sais pas comment l'envoyer dans le fichier, donc j'aimerai savoir où je peux trouver une aide complète sur les fichiers, car google est à bout sur le sujet

    Merci de votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite(&structure, sizeof(structure), 1, file);

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Citation Envoyé par karami
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite(&structure, sizeof(structure), 1, file);
    C'est dangeureux ça ! Si la structure contient des pointeurs, ce sont les adresses qui vont être écrites dans le fichier...

  4. #4
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    ça dépend de la structure qu'il veut utiliser, avec une structure comme ça y'a pas de probleme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct structure
    {
       char name[30];
       int  age;
    };

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,
    Citation Envoyé par Fabllot
    C'est dangeureux ça ! Si la structure contient des pointeurs, ce sont les adresses qui vont être écrites dans le fichier...
    Ben, il suffit de créer sa structure de manière cohérente...
    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
     
    typedef struct SToSave
    { /*aucun pointeur dans cette structure */
        char nom[10];
        char prenom[10];
        int age;
    }ToSave;
     
    typedef struct SListe
    {
        ToSave data;
        /* juste un pointeur sur le suivant dans la liste */
        struct SListe *Suivant;
    }Liste;
    void mafonct()
    {
        Liste *MaListe;
        Liste *travail;
         (...)
        travail=Maliste;
        while(travail!=NULL)
        {
            fwrite(travail->data,sizeof(ToSave),fp);
            travail=travail->Suivant;
        }
    }
    //mais ca pourrait ausi etre
        while(travail!=NULL)
        {
            fwrite(travail->data->nom,10,fp);
            fwrite(travail->data->prenom,10,fp);
            fwrite(travail->data->age,sizeof(int),fp);
            travail=travail->Suivant;
        }
    A titre personnel, j'ai pris l'habitude de créer mes structures de données de manière séparée de ce qui permet leur gestion... et sans utiliser de pointeur..

    [EDIT]grilé sur le fil...[/edit]

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Je suis tout à fait d'accord avec vous. Je disais cela puisque "showdown" n'a pas donné de précision sur sa structure...
    C'était un simple "Warning" !

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    non c'est bon ya pas de pointeur dans la structure, je vais tester merci

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    koala01, ca veut dire quoi cette instruction "->"?
    le nom de ton fichier est bien fp ?

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par koala01
    Ben, il suffit de créer sa structure de manière cohérente...
    ...et se souvenir que le fichier binaire genere depend de la plateforme, du compilateur, et des options passees au compilateur (alignement des structures).

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Citation Envoyé par showdown
    koala01, ca veut dire quoi cette instruction "->"?
    C'est quand l'objet est un pointeur vers une structure...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ToSave monObjet1;
    ToSave *monObjet2; 
    [...]
    monObjet1.age = 10;
    monObjet2->age = 10;
    le nom de ton fichier est bien fp ?
    Non "fp", est une variable de type FILE* qui contient des infos sur le fichier.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    ca bug pas mal la

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<string.h>
    #include<fcntl.h>
    typedef char chaine15[15];
    typedef char chaine10[10];
     
    typedef struct
     {
      chaine15 identite;
      chaine15 fonction;
      chaine10 tel;
      char present;
      int anciennete;
     } personne;
     
    main()
    {
     
      personne pers[15];     
      FILE *P_FICHIER; /* pointeur sur FILE */
      char NOM_FICHIER[30], NOM_PERS[30];
      int  C, NB_ENREG;
     
      /* Première partie : 
         Créer et remplir le fichier */
      printf("Entrez le nom du fichier a creer : ");
      scanf("%s", NOM_FICHIER);
      P_FICHIER = fopen(NOM_FICHIER, "w");  /* write */
      printf("Nombre d'enregistrements a creer : ");
      scanf("%d", &NB_ENREG);
      C = 0;
      while (C<NB_ENREG)
         { 
        puts("Veuillez saisir votre identité\n");
        scanf("%s", &pers[C].identite);
        puts("Veuillez saisir votre fonction\n");
        scanf("%s", &pers[C].fonction);
        puts("Veuillez saisir votre numero de telephone\n");
        scanf("%s", &pers[C].tel);
        puts("Etes-vous present??\n");
        scanf("%c", &pers[C].present);
        puts("Veuillez saisir votre anciennete\n");
        scanf("%d", &pers[C].anciennete);
        fwrite(&pers[C], sizeof(pers[C]), 1, P_FICHIER);
        C++;
         /*printf("Entrez le nom de la personne : ");
          scanf("%s", NOM_PERS);
          fprintf(P_FICHIER, "%s\n", NOM_PERS);
          C++;*/
     
         }
      fclose(P_FICHIER);
    }
    pouvez-vous me dire où ca bug? pas forcément le corriger car sinon j'apprends pas ^^

    Merci

  12. #12
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par showdown
    Alors l'endroit où je bug dans mon programme, c'est pour liée une structure avec un fichier :
    je remplie ma structure, mais je ne sais pas comment l'envoyer dans le fichier, donc j'aimerai savoir où je peux trouver une aide complète sur les fichiers,
    Il faut 'sérialiser'. Ce n'est pas trivial.

    http://emmanuel-delahaye.developpez....m#enreg_struct

  13. #13
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par showdown
    ca bug pas mal la

    voici le code

    pouvez-vous me dire où ca bug?
    Ton compilateur peut te le dire. Il faut lui demander gentiment...

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:19: warning: return type defaults to `int'
    main.c:19: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:37: warning: char format, chaine15 arg (arg 2)
    main.c:39: warning: char format, chaine15 arg (arg 2)
    main.c:41: warning: char format, chaine10 arg (arg 2)
    main.c:23: warning: unused variable `NOM_PERS'
    main.c:55: warning: control reaches end of non-void function
    Linking console executable: C:\dev\forums2\console.exe
    Process terminated with status 0 (0 minutes, 4 seconds)
    0 errors, 7 warnings

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    j'ai oublié de préciser : je programme sous dev-c++ 4.9.9.2

    donc avec ce lien, je ne vois pas ce que je peux en tirer :

  15. #15
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par showdown
    j'ai oublié de préciser : je programme sous dev-c++ 4.9.9.2

    donc avec ce lien, je ne vois pas ce que je peux en tirer :
    Le compilateur étant MinGW, tu as les informations nécessaires.

    Evidemment après il faut apprendre à utiliser son IDE...

    Avec wxDevC++ (remplace Dev-C++ qui n'est plus maintenu) :

    • Outils / Options du compilateur
    • Dans la zone de saisie "Ajouter les commandes suivantes lors de l'appel du compilateur", copier/coller les options que je recommande.
    • Valider
    • Régénérer (Ctrl-F11)

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    donc wxDevC++ est plus performant que dev?

    merci de t'acharner sur un noob comme moi

  17. #17
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par showdown
    donc wxDevC++ est plus performant que dev?
    Oui. Des bugs sont corrigés. Par contre, l'utilisation en C demande un certain.. doigté...

    http://www.developpez.net/forums/forumdisplay.php?f=374

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/04/2010, 11h29
  2. Réponses: 2
    Dernier message: 14/10/2009, 10h36
  3. Utilisation de mémoire partagé avec une structure
    Par Masmeta dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/02/2009, 17h20
  4. [LG]Lecture de fichier avec une adresse internet
    Par forbin dans le forum Langage
    Réponses: 8
    Dernier message: 09/02/2005, 19h00
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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