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 :

Fichiers et strutures ( du chinois )


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Par défaut Fichiers et strutures ( du chinois )
    Bonsoir à tous voilà j'aimerais bien stocker ma structure mais je ne sais pas comment faire ou même je ne sais pas comment sa fonctionne
    Merci d'avance

    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
    #include <stdlib.h
    #include <stdio.h>
     
     
    typedef struct personne
    {
    	char nom[40];
    	char prenom[20];
    	int age;
    }liste;
     
    int main()
    {
    	liste LISTE[200]=
    	{
    		{"Rose","Lionel",22},
    		{"Wolfs","Xavier",22},
    		{"Gibier","Jerome",22},
     
     
    	};
     
     
    		return 0;
    }

  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
    Citation Envoyé par Master C Voir le message
    Bonsoir à tous voilà j'aimerais bien stocker ma structure mais je ne sais pas comment faire
    Il faut sérialiser. Le mode texte (CSV) est le plus simple. Tu transformes en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Rose;Lionel;22
    Wolfs;Xavier;22
    Gibier;Jerome;22
    fprintf() etc.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Par défaut
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    #include "stdio.h"
    #include <stdlib.h>
     
     
    void sommaire();
    int ecriture(struct personne *,int);
    void lecture(struct personne *,int);
     
    typedef struct personne
    {
    	char nom[40];
    	char prenom[20];
    	int age;
    }liste;
     
    static void vider(void)
    {
        int c;
     
        while ((c = getchar()) != '\n' && c != EOF)
        {}
    }
     
    int main()
    {
    	sommaire();	
     
    		return 0;
    }
     
    void sommaire()
    {
    	int choix,nbel = 0;
     
    	liste eleve[200];
     
     
    	do
    	{
    		system("cls");
    		printf("\n\n\t ---------------------------------------------------------------\n");
    		printf("\t|                      #Menu principal                          |\n");
    		printf("\t|---------------------------------------------------------------|\n");
    		printf("\t|                                                               |\n");
    		printf("\t|                                                               |\n");
    		printf("\t|                      1. ecriture                              |\n");
    		printf("\t|                      2. Lecture                               |\n");
    		printf("\t|                      3. quitter                               |\n");
    		printf("\t|                                                               |\n");
    		printf("\t|                                                               |\n");
    		printf("\t ---------------------------------------------------------------\n");
    		printf("\tChoix : ");
    		scanf("%d",&choix);
    		switch(choix)
    		{
    			case 1:
    			nbel = ecriture(eleve,nbel);
    			break;
    			case 2:
    			lecture(eleve,nbel);
    			break;		
     
    		}
    	}
    	while(choix != 3);
     
    }
     
    int ecriture(struct personne *pt,int nbel)
    {
    	FILE *fp = NULL;
     
    	printf("Nom : ");
    	vider();
    	fgets(pt->nom,40,stdin);
    	printf("Prenom : ");
    	vider();
    	fgets(pt->nom,20,stdin);
    	printf("Age :");
    	scanf("%d",pt->age);
     
    	fp = fopen("liste.dat","wb");
    	if(fp != NULL)
    	{
    		nbel++;
    		fwrite(pt, sizeof(liste),nbel,fp);
    		fclose(fp);	
     
    	}
    	else
    	{
    		printf("<< Erreur d'ecriture dans le fichier >>");
    		exit(-1);
     
     
    	}
     
    	return nbel;
    }
    void lecture(struct personne *pt,int nbel)
    {
     
    }
    j'ai fais sa mais sa plante après avoir tout saisi

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Ce code ne se compile pas correctement:

    Compiling: main.c
    E:\projet\test_DVP\main.c:5: warning: function declaration isn't a prototype
    E:\projet\test_DVP\main.c:6: warning: "struct personne" declared inside parameter list
    E:\projet\test_DVP\main.c:6: warning: its scope is only this definition or declaration, which is probably not what you want
    E:\projet\test_DVP\main.c:7: warning: "struct personne" declared inside parameter list
    E:\projet\test_DVP\main.c:25: warning: function declaration isn't a prototype
    E:\projet\test_DVP\main.c:32: warning: function declaration isn't a prototype
    E:\projet\test_DVP\main.c: In function `ecriture':
    E:\projet\test_DVP\main.c:80: warning: format argument is not a pointer (arg 2)
    E:\projet\test_DVP\main.c: At top level:
    E:\projet\test_DVP\main.c:100: warning: unused parameter 'pt'
    E:\projet\test_DVP\main.c:100: warning: unused parameter 'nbel'
    Linking console executable: bin\Release\test_DVP.exe
    Output size is 23.19 KB
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 9 warnings

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Indépendamment des problèmes indiqués par le compilateur (dont l'utilisation d'un entier à la place d'une adresse qui est probablement la source du plantage observé):

    * La fonction vider() n'est pas appelée au bon moment. En effet elle devrait être appelé après les saisies et non avant et uniquement s'il est nécessaire de purger le flux.
    * Mauvaise utilisation de scanf(). Si tu saisies une lettre et non un chiffre dans le menu le programme part en boucle infinie (l'appel à vide() après ce scanf() permet de résoudre ce problème en plus de consommer le \n présent dans le flux).
    * le prénom est saisi dans le champ servant à stocker nom.
    * Il est vraisemblablement prévu de pouvoir stocker plusieurs enregistrement (utilisation d'un compteur nbel) mais dans les faits, seul l'élément courant est enregistré. Les saisies ont toujours lieu dans le premier élément du tableau eleve.
    * La gestion de nbel est incorrect. Puisque tu passe la valeur de nbel à la fonction ecriture() et non son adresse la valeur de nbel vaudra toujours 0 dans la fonction sommaire() et 1 lors de l'appel a fwrite
    * Pourquoi recréer et réouvrir le fichier à chaque itération ? Ce n'est pas très efficace.
    * L'enregistrement de structure brute dans un fichier peut poser des problémes, il est préférable, comme l'a déjà indiqué Emmanuel, d sérialiser la structure.

Discussions similaires

  1. API PDF + fichier japonais ou chinois
    Par ouamtax dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 06/11/2009, 10h51
  2. localisation: Créer un fichier resource en chinois
    Par shirya dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/09/2009, 15h03
  3. Partage de fichiers windows XP, un casse tete chinois
    Par Mister_FX dans le forum Administration
    Réponses: 1
    Dernier message: 29/11/2008, 03h21
  4. Fichier de langue avec des caractères chinois
    Par marcootz dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/01/2007, 18h54
  5. [Débutant]Caractères chinois dans un fichier.
    Par angearael dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2007, 13h54

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