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 :

ecriture dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut ecriture dans un fichier
    bonjour à tous,
    j'ai un probleme qui me casse la tête a savoir le suivant.
    j'ai une fonctionc
    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
     
    //declaration de ma structure
    typdef struct stligne stligne;
    struct stligne{
         int id;
         char ch1[50];
         char ch2[50];
         char ch3[50];
    };
    // fonction ecrire ligne
    int ecrireligne(stligne *ligne)
    {
       FILE *pF = NULL;
       if ((pF = fopen("fichier.csv", "a"))){ 
                fprintf(pF, "%4d, %s, %s, %s \n", 
                               &ligne->id, ligne->ch1, ligne->ch2, ligne->ch3);
                fclose(pF);
                return 0;
       } else return 1;
    }
     
    // et j'ai mon main qui se presente coe suit
     
    #include..
    int main (int argc, char *argv[]){
         stligne ligne, *lignef;
         lignef = &ligne;
         int j;
         char ch = 'y';
         while (ch == 'y'){
              j= ecrireligne(lignef);
              printf("entrer [y] pour une autre ligne\n");
              ch = getchar();
         }
         return j;
    }
    mais alors des que je voudrais entrer la seconde ligne j'ai une erreur d'acces memoire.
    merci de me répondre.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    On peut voir l'appel de la fonction et si possible comment est initialiser la variable que tu passes en paramètre.

  3. #3
    Expert confirmé

    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
    Billets dans le blog
    2
    Par défaut
    1) beurrrkkkk !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ....
         lignef = &ligne;
         int j;
         char ch = 'y';
         while (ch == 'y'){
    ...
    NE PAS METTRE de déclarations entre des instructions !!!!!

    2) ton lignef est parfaitement inutile

    3) dans ton printf dans la fonction tu mélanges pointeurs et non-pointeurs...

    Le minimum est ceci :

    Pour le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main (int argc, char *argv[]){
         stligne ligne;
         int j;
         char ch = 'y';
    
         while (ch == 'y'){
              j= ecrireligne(&ligne);
        .....
    Et pour la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                fprintf(pF, "%4d, %s, %s, %s \n", 
                               ligne->id, .... );
    Ca c'est le minimum.. Maintenant tel quel ça marchera pas....

    Je te conseillerais de lire la doc. sur le langage C, tout d'abord

    En plus ton if ( (pf = ... ) il te manque la comparaison .... If ( (pf = ..) != NULL )

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    en fait j'ai besoin d'un pointeur a l'entrée de la fonction ecrireligne(..). L'appel de la fonction je le fais dans le main et l'initialisation aussi comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main (int argc, char *argv[]){
         int j;
         stligne ligne; 
         stligne *lignef; 
         lignef = &ligne; // initialisation!!!
         char ch = 'y';
         while (ch == 'y'){
              j= ecrireligne(lignef);
              printf("entrer [y] pour une autre ligne\n");
              ch = getchar();
         }
         return j;
    }
    merci deja et j'attends encore vos réponses

  5. #5
    Expert confirmé

    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
    Billets dans le blog
    2
    Par défaut
    au risque de me répéter, LIS LA DOC et tiens compte des conseils qu'on te donne.....

    Tu verras que tu n'as pas besoin de ce que tu fais avec lignef... si tu passes &ligne dans la fonction au lieu de lignef, C'EST un pointeur....

    ET ELIMINE LA DECLARATION char ch = 'y'; du milieu du code ....

    Si tu ne tiens pas compte de ce qu'on te dit, on ne t'aidera plus...

  6. #6
    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 tcharles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typdef struct stligne stligne;
    typedef...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    struct stligne{
         int id;
         char ch1[50];
         char ch2[50];
         char ch3[50];
    };
    // fonction ecrire ligne
    int ecrireligne(stligne *ligne)
     
                fprintf(pF, "%4d, %s, %s, %s \n", 
                               &ligne->id, ligne->ch1, ligne->ch2, ligne->ch3);
    Pourquoi &ligne->id ? et plein d'autres petits détails...
    Ceci fonctionne :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    //declaration de ma structure
    typedef struct stligne stligne;
    struct stligne
    {
       int id;
       char ch1[50];
       char ch2[50];
       char ch3[50];
    };
    // fonction ecrire ligne
    int ecrireligne (stligne * ligne)
    {
       int ret = EXIT_SUCCESS;
       FILE *pF = fopen ("fichier.csv", "a");
     
       if (pF != NULL)
       {
          fprintf (pF, "%4d, %s, %s, %s \n",
                   ligne->id, ligne->ch1, ligne->ch2, ligne->ch3);
          fclose (pF), pF = NULL;
       }
       else
       {
          ret = EXIT_FAILURE;
       }
       return ret;
    }
     
    int main (void)
    {
       int ret;
       stligne ligne = { 123, "abc", "def, ghi" };
       int ch;
     
       do
       {
          ret = ecrireligne (&ligne);
          printf ("entrer [y] pour une autre ligne\n");
          ch = getchar ();
          (void) getchar ();        /* \n */
       }
       while (ch == 'y');
     
       return ret;
    }
    Pose des questions si tu ne comprends pas.

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

Discussions similaires

  1. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  2. Script shell - écriture dans un fichier
    Par Leishmaniose dans le forum Linux
    Réponses: 6
    Dernier message: 13/12/2004, 22h48
  3. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46
  4. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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