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 :

Enregistrer les informations saisies dans un fichier ?


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut Enregistrer les informations saisies dans un fichier ?
    Bonsoir,

    J'ai écris un programme qui gère disons une classe avec nom prenom code étudiant ....
    Il fonctionne bien sous dos quand je saisie les informations d'un étudiant il sont enregistrer d'une façon temporaire seulement.

    J'ai envi d'enregistrer ma saisie dans un fichier et pouvoir la charger la prochaine fois que j'exécute le programme.

    Voici ma fonction qui marche 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
     
    //Enregistrer les etudiants dans un fichier
     
    void enregistrer_fichier(struct elt *c,char *NomFic)
    {
        int nb;
        FILE *fic;
        fic=fopen(NomFic,"at");
        if(c != NULL)
        {
            nb=ajouter_etudiant(start,NOM,PRENOM,date_naissance,matricule,budget);
            fwrite(&nb,sizeof(char),1,fic);
            fclose(fic);
        }
    }
    Le programme ne reconnait pas arguments de ma fonction ajouter_etudiant précédemment définie.

  2. #2
    Membre averti Avatar de yetimothee
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    T'as bien défini tes prototypes de fonctions ?
    Dis nous comment ton code est organiser, sinon ça va pas être simple

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    oui bien sur les prototypes sont définies !

    Tu as besoin de quoi au juste ?
    le main ??

  4. #4
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    Le mode d'ouverture "at" n'est pas standard.

    Le programme ne reconnait pas arguments de ma fonction ajouter_etudiant précédemment définie.
    Postes son code !
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par OthmanX Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int nb;
    ...
            fwrite(&nb,sizeof(char),1,fic);
    ???

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    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
     
    struct elt *ajouter_etudiant(struct elt *start,char *NOM,char *PRENOM,char *date_naissance,char* matricule,char *budget)
    {
    	struct elt *tmp=malloc(sizeof(struct elt)), *p_tmp;
    	strcpy(tmp->nom,NOM);
        strcpy(tmp->prenom,PRENOM);
        strcpy(tmp->date_naissance,date_naissance);
    	strcpy(tmp->matricule,matricule);
        strcpy(tmp->budget,budget);
    	tmp->suivant=NULL;
     
    	if(start==NULL)
    	{
    		start=tmp;
    	}
    	else
    	{
    		p_tmp=start;
    		while(p_tmp->suivant!=NULL)
    			p_tmp=p_tmp->suivant;
    		p_tmp->suivant=tmp;
    	}
    	return start;
    }
    C'est ma fonction ajouter_etudiant ( l'enregistrer en quelques sortes sous dos )

    PS: j'ai toujours pas inclus la fonction enregistrer fichier..

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Enregistrer les etudiants dans un fichier
     
    void enregistrer_fichier(struct elt *c,char *NomFic)
    {
        int nb;
        FILE *fic;
        fic=fopen(NomFic,"at");
        if(c != NULL)
        {
    Il faudrait peut etre vérifier que fic n'est pas nul non plus. Et dans les paramètres de fopen , plutôt utiliser "a" que "at".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            nb=ajouter_etudiant(start,NOM,PRENOM,date_naissance,matricule,budget);
            fwrite(&nb,sizeof(char),1,fic);
            fclose(fic);
        }
    }
    dans le fwrite, si tu veux vraiment écrire la valeur de nb, c'est sizeof(int) qu'il faut mettre.

    ++

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    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
     
    void enregistrer_fichier(struct elt *c,char *NomFic)
    {
        char nb;
        FILE *fic;
        fic=fopen(NomFic,"w");
        if(c != NULL)
        {
            nb=ajouter_etudiant(start,NOM,PRENOM,date_naissance,matricule,budget);
            fwrite(&nb,sizeof(char),1,fic);
            fclose(fic);
        }
    }
    j'ai mis comme type de lecture "w" c'est mieux.

    nb recevra des char ( nom, prenom, date_naissance ... )

    j'ai modifié pour mettre sizeof(char)

  9. #9
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    nb recevra des char ( nom, prenom, date_naissance ... )
    ???
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  10. #10
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    Pourquoi tu ne fais pas un fprintf des divers champs que contient la strcture ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fprintf( fic, "%s", elt->NOM);
    [...]
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  11. #11
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    j'ai du mal à m'expliquer

    Je reviens plus tard.

    Merci.

  12. #12
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    Attention en mode "w" le pointeur de flux est placé au début du fichier pas à la fin comme en mode "a"
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  13. #13
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par OthmanX Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void enregistrer_fichier(struct elt *c,char *NomFic)
    {
        char nb;
        FILE *fic;
        fic=fopen(NomFic,"w");
        if(c != NULL)
        {
            nb=ajouter_etudiant(start,NOM,PRENOM,date_naissance,matricule,budget);
            fwrite(&nb,sizeof(char),1,fic);
            fclose(fic);
        }
    }
    j'ai mis comme type de lecture "w" c'est mieux.

    nb recevra des char ( nom, prenom, date_naissance ... )

    j'ai modifié pour mettre sizeof(char)
    ajouter_etudiant() renvoie un "struct elt*" et non un int ou un char.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     nb=ajouter_etudiant(start,NOM,PRENOM,date_naissance,matricule,budget);
    Aussi, en mode binaire, on doit ouvrir le fichier avec "wb ou rb".

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Petites indications ...
    Bonsoir,

    Quelques informations supplémentaires, il faut vérifier que ton pointeur de type FILE* a bien été crée (donc différent de NULL) et aussi, il faut pas oublier de fermer ton fichier en utilisant la fonction fclose (regarde le prototype sur le site www.cppreference.com ou dans la lib C) ...

    Sinon, il me semble que tant que tu es pas sorti du programme principal "main", ce fichier ne sera pas mis à jour en temps réel (si tu n'es pas en mode append à vérifier, ca c'est des vieux souvenirs de mes cours de C) ...

    Aprés lors de l'ouverture de ton programme, tu peux te faire une fonction qui utilse le prototype de fscanf afin de lire ton fichier texte ...Un autre conseil, si tu stockes tout tes champs dans un fichier texte, essayes de les séparer par un ; ou une virgule ...

    A la fin de l'execution de ton programme, penses aussi à vérifier que la mémoire que tu as utilisé avec ta liste chainée et bien désalloué intégralement ...

    Si tu tournes sous cygwin, ou linux, tu peux utiliser Valgrind si tu utilses Visual C++, fais une recherche sur le site de msdn en specifiant "memory leaks" ... De mémoire, sur le site, tu vas rajouter une inclusion et l'appel à une fonction qui va te permettre de savoir combien de mémoire tu as alloué et surtout combien de mémoire tu as libéré ...

    @+
    ----------------------------------------
    Si un code marche et que tu ne sais pas pourquoi il marche, c'est que tu ne t'ai posé les bonnes questions donc dans 95% des cas, il est bugué

  15. #15
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    Merci pour vos conseils.

    Bon j'ai pu faire fonctionner la fonction. sauf que là, ça me crée un fichier vide !

    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
     
    struct elt *ajouter_etudiant(struct elt *start,char *NOM,char *PRENOM,char *date_naissance,char* matricule,char *budget)
    {
        FILE *NomFic;
    	struct elt *tmp=malloc(sizeof(struct elt)), *p_tmp;
    	strcpy(tmp->nom,NOM);
        strcpy(tmp->prenom,PRENOM);
        strcpy(tmp->date_naissance,date_naissance);
    	strcpy(tmp->matricule,matricule);
        strcpy(tmp->budget,budget);
    	tmp->suivant=NULL;
        enregistrer_fichier(tmp,NomFic);
    	if(start==NULL)
    	{
    		start=tmp;
    	}
    	else
    	{
    		p_tmp=start;
    		while(p_tmp->suivant!=NULL)
    			p_tmp=p_tmp->suivant;
    		p_tmp->suivant=tmp;
    	}
    	return start;
    }
    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
     
    void enregistrer_fichier(struct elt *c,char *NomFic)
    {
        FILE *fic;
        fic=fopen(NomFic,"a");
        if(c != NULL)
        {
            fprintf( fic, "%s", c->nom);
            fprintf(fic,"Matricule Etudiant:    %s\n\n",c->matricule);
    			fprintf(fic,"Nom:       %s\n\n",c->nom);
    			fprintf(fic,"Prenom:    %s\n\n",c->prenom);
    			fprintf(fic,"Date de naissance:     %s\n\n",c->date_naissance);
    			fprintf(fic,"Budget:       %s\n\n",c->budget);
                fclose(fic);
        }
    }
    Après dans le menu, j'ai ajouté une option pour enregistrer les étudiants entrés...ça donne toujours rien!

  16. #16
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par OthmanX Voir le message
    Merci pour vos conseils.

    Bon j'ai pu faire fonctionner la fonction. sauf que là, ça me crée un fichier vide !

    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
     
    struct elt *ajouter_etudiant(struct elt *start,char *NOM,char *PRENOM,char *date_naissance,char* matricule,char *budget)
    {
        FILE *NomFic;
    	struct elt *tmp=malloc(sizeof(struct elt)), *p_tmp;
    	strcpy(tmp->nom,NOM);
        strcpy(tmp->prenom,PRENOM);
        strcpy(tmp->date_naissance,date_naissance);
    	strcpy(tmp->matricule,matricule);
        strcpy(tmp->budget,budget);
    	tmp->suivant=NULL;
        enregistrer_fichier(tmp,NomFic);
    	if(start==NULL)
    	{
    		start=tmp;
    	}
    	else
    	{
    		p_tmp=start;
    		while(p_tmp->suivant!=NULL)
    			p_tmp=p_tmp->suivant;
    		p_tmp->suivant=tmp;
    	}
    	return start;
    }
    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
     
    void enregistrer_fichier(struct elt *c,char *NomFic)
    {
        FILE *fic;
        fic=fopen(NomFic,"a");
        if(c != NULL)
        {
            fprintf( fic, "%s", c->nom);
            fprintf(fic,"Matricule Etudiant:    %s\n\n",c->matricule);
    			fprintf(fic,"Nom:       %s\n\n",c->nom);
    			fprintf(fic,"Prenom:    %s\n\n",c->prenom);
    			fprintf(fic,"Date de naissance:     %s\n\n",c->date_naissance);
    			fprintf(fic,"Budget:       %s\n\n",c->budget);
                fclose(fic);
        }
    }
    Après dans le menu, j'ai ajouté une option pour enregistrer les étudiants entrés...ça donne toujours rien!
    Met fclose() hors du if.

    As tu verifié si c est vide ?

  17. #17
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    Je vérifie sur le main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    case 69:
                    {
                        system("del Data.txt");
                        system("cls");
                        enregistrer_fichier(c,NomFic);
                        if( c == NULL)
                        printf("Aucun etudiant a enregistrer");
                        else
                        printf("Etudiants enregistres\202\n");
                        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAppuyez sur une touche pour retourner au menu principal");
                        getch();
                    }
    Une fois qu'on lance le programme, on a un menu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void menu()
    {
         system("cls");
         printf("\a\n\nQue voulez-vous faire?");
         printf("\n\n\n\t\t\tA-  Ajouter un etudiant\n\n");
         printf("\t\t\tB-  Consulter les etudiants ajoutes\n\n");
         printf("\t\t\tC-  Rechercher un etudiant par code\n\n");
         printf("\t\t\tD-  Rechercher un etudiant par nom\n\n");
         printf("\t\t\tE-  Enregistrer les etudiants dans un fichier\n\n");
         printf("\t\t\tQ-  Quitter/!\\");
    }
    Quand je choisi au debut "E" ça me donne aucun etudiant à enregistrer. C'est OK.

    mais quand j'ajoute un étudiant avec "A" et que je reviens sur le menu principal pour enregistrer, il me dit qu'il y a toujours aucun étudiant à enregistrer !

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Re,

    Peux-tu mettre ton code en ligne ?
    Peux-tu nous dire sous quel OS tu es ?

  19. #19
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Points : 334
    Points
    334
    Par défaut
    1- Mon code au complet je ne peux pas le mettre pour le moment. Seulement ce qu'on a besoin pour résoudre le problème.

    2- Je suis sous Vista.

  20. #20
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par OthmanX Voir le message
    Quand je choisi au debut "E" ça me donne aucun etudiant à enregistrer. C'est OK.

    mais quand j'ajoute un étudiant avec "A" et que je reviens sur le menu principal pour enregistrer, il me dit qu'il y a toujours aucun étudiant à enregistrer !
    c' est que la liste chainée est bien vide.
    On t' aidera plus facilement si tu pouvais poster le code complet.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/08/2010, 16h11
  2. récuperer les champs saisi dans un fichier
    Par wrigan dans le forum Langage
    Réponses: 1
    Dernier message: 06/12/2009, 12h40
  3. [AC-2000] Controler les informations saisies dans une zone de texte
    Par etoileetoile dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/10/2009, 14h33
  4. Réponses: 3
    Dernier message: 06/07/2007, 09h49
  5. Réponses: 5
    Dernier message: 16/03/2005, 22h17

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