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 de tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Par défaut ecriture de tableau
    Bonsoir !
    je souhaite ecrire dans un fichier un tableau de structure;rempli par des informations fournies au clavier.
    J'ai commencé par remplir mon tableau ensuite le recopier d'un coup dans mon fichier.
    voila ce que j'ai fait:

    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define lg_file 100
    #define nb_enfant_max 5
     
    /*********** definition variable de type struct *******/
     
    struct person {
        char nom, prenom;
        int enfant;
        int age_enfant[nb_enfant_max];
    };
     
    /*************   debut  *******************/
     
    main()
     
    /************** declaration des variables********/
    {
        char file_name[lg_file + 1];
        FILE *fichier;
        struct person tab[3];
        int taille_tableau = 3 * sizeof(struct person);
        int i;
        int j;
     
     
    /************** ouverture d'un fichier en ecriture ********/
     
        printf("entrez le nom de votre fichier: \n");
        gets(file_name);
     
        if ((fichier = fopen(file_name, "w")) == NULL) {
            printf("ouverture echouée");
            exit(-1);
        }
     
    /************* implementation de mon tableau************/
     
        for (i = 0; i < 3; i++) {
            printf("entrez le nom de votre client:");
            scanf("%c", tab[i].nom);
     
            printf("entrez le nom prenom votre client:");
            scanf("%c", tab[i].prenom);
     
            printf("entrez le nombre d'enfant de votre client:");
            scanf("%d", tab[i].enfant);
     
            for (j = 0; j < 5 && j < tab[i].enfant; j++)
            {
     
                printf("entrez l'age du % d enfant de votre client:", j + 1);
                scanf("%d", tab[i].age_enfant[j]);
            }
     
    /****************** ecriture fichier ***************/
     
            fwrite(tab, taille_tableau, 1, fichier);
     
     
    /****************** fin creation ***************/
     
            fclose(fichier);
     
        }
    }
    Voila j'ai essayé;mais j'y arrive pas

    Si vs trouvez mon code bizarre, ne m'en voulez pas ;chui debutante en c

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salux,

    J'imagine que le nom et le prenom ne tiennent pas dans un caractère, donc il faudrait un tableau de caractère pour ces champs là, et non un caractère unique.
    La taille de ce tableau de caractère devrait être determinée par une constante symbolique (de la meme façon que tu avais une constante "lg_file"). (by the way : par convention les macros/constantes symboliques en majuscules)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #define PERSON_NOM_MAXLG 50
    #define PERSON_PRENOM_MAXLG 50
    struct person {
        char nom[PERSON_NOM_MAXLG + 1];
        char prenom[PERSON_PRENOM_MAXLG + 1];
        int enfant;
        int age_enfant[nb_enfant_max];
    };
    Pour la saisie, scanf n'est pas conseillé, il vaut mieux une utilisation maitrisée de fgets() ( http://c.developpez.com/faq/c/?page=clavier_ecran )

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    De plus,

    main() doit retourner un entier.

    L'utilisation de gets n'est pas conseillée.
    http://c.developpez.com/faq/c/?page=...EEN_gets_fgets

    Il faut passer à scanf un pointeur et non directement un entier ou un caractère. De toutes façons, comme il a déjà été dit, il ne faut pas utiliser scanf.

    Je ne crois pas que tu veuilles écrire un fichier binaire. Utilise plutôt fprintf pour écrire dans ton fichier. Ce sera plus facile pour le lire dans un éditeur de textes.

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Par défaut
    j'ai modifié mon code , mais j'ai un probleme au niveau de la boucle j qui s'execute pas , j'ai beau cherché mais je ne trouve pas .
    MERCI POUR VOTRE AIDE

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Hum... difficile de deviner comment tu as changé le code.
    Donc difficile de te répondre.

    Autre chose sans aucun rapport : imagine maintenant que tu ne veuilles pas gérer les familles nombreuses. Disons que nb_enfant_max vaut 3. Tu n'aurais pas un problème avec ta boucle j ?

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Par défaut
    euuuuuh effectivement tu as rasion ;
    pour un nombre d'enfant = 0 ma boucle fonctionnera ce qui est .
    je crois que je ferais mieux d'aller me coucher
    je revois tt ca le matin. merci encore une fois

Discussions similaires

  1. Ecriture à 90° dans un tableau
    Par lagag dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/01/2007, 16h47
  2. Réponses: 22
    Dernier message: 22/12/2006, 18h01
  3. ecriture d'un tableau dans un fichier
    Par hafid49 dans le forum C
    Réponses: 4
    Dernier message: 06/06/2006, 23h38
  4. [JDBC]lecture et ecriture d'un tableau de Byte[]
    Par mehdi82 dans le forum JDBC
    Réponses: 3
    Dernier message: 12/12/2005, 12h11
  5. [VB.NET] Tableau de bytes Lecture/Ecriture
    Par BenoitM dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/04/2005, 09h51

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