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 :

Enregistrement de chaines de caractères dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut Enregistrement de chaines de caractères dans un fichier
    Bonjour,

    Mon programme enregistre des chaines de caractère que l'utilisateur saisi puis les enregistre dans un fichier nommé personne.

    Je ne sais pas d'ou vient le probleme, mais le programme n'écrit dans le fichier que certaines chaines et des chaines relativement courte alors que l'allocation de mémoire ainsi que la taille des caractère disponible me semblent convenir.

    Le programme s'arrete dans le code lors de l'ouverture du fichier.

    Si quelqu'un a une idée en lisant ou en compilant mon programme, cela m'arrangerait.

    le code de mon programme est:
    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #ifdef __cplusplus
    #error Tentative de compilation de code C par un compilo C++
    #endif
     
    static void purger(void);
    void fpurge(char *, FILE *);
     
     
    int main (void)
    {
     
    int nombrefiches=0;
    int end = 0;
    char (*tab_fiches)[100] = NULL;
    int err = EXIT_SUCCESS;
    FILE* fichier = NULL;
     
    printf("################## Programme de gestion de Fiches Personnes : ##################\n\n");
     
    printf("Combien de Fiches personnes souhaitez-vous enregistrer ?\n\n");
    scanf("%i",&nombrefiches);
     
    purger();
     
    printf("Vous allez donc enregistrer %i Fiches Personnes\n\n",nombrefiches);
     
    printf("Si vous souhaitez rentrer moins de Fiches Personnes que prévu \nalors tapez 'aucune'\n\n");
    system("pause");
     
    printf("\n");
     
    tab_fiches = malloc(nombrefiches * sizeof *tab_fiches); // Allocation de mémoire dynamique
     
        if (tab_fiches != NULL)
        {
            int i=1;
     
            /* Initialisation des n premiers octets du tableau p_tab avec le caractère 0*/
            memset(tab_fiches, '0', nombrefiches * sizeof (*tab_fiches));
     
            /* Saisie des chaines de caractère */
            for (i = 0; i < nombrefiches && end == 0; i++)
            {
                printf("Entrez la Fiche Personne n°%i :\n",i+1);
     
                fflush(stdout); // Vidage du tampon après chaque saisie
     
                if (fgets(tab_fiches[i+1], sizeof tab_fiches[i+1], stdin) != NULL)
                {
     
                    fpurge(tab_fiches[i+1], stdin);
     
                    if (strcmp(tab_fiches[i+1], "aucune") == 0)
                    {
                        *tab_fiches[i+1] = 0;
                        end = 1;
                    }
                }
            }
     
    printf("Ces fiches personnes vont maintenant être enregistrées dans votre fichier\n\n");
     
    fichier = fopen("personnes.txt", "a");
     
            if(fichier == 0)
            {
                   perror("Erreur dans l'ouverture du fichier personnes.txt");
                   exit(0);
            }
            if (fichier != 0)
            {
                        for (i = 0; i < nombrefiches && *tab_fiches[i+1] != 0; i++)
                        {
                             fputs(tab_fiches[i+1], fichier);
                             fputs("\n", fichier);
                        }
            }
     
    fclose(fichier);
     
    printf("\n");
    printf("Récapitulatif des Fiches Personnes enregistrées\n\n");
     
            /* Affichage des chaines saisies */
            for (i = 0; i < nombrefiches && *tab_fiches[i+1] != 0; i++)
            {
                printf("La fiche n°%i est :\n",i+1);
                puts(tab_fiches[i+1]);
            }
            /* Délestage de l'espace mémoire alloué */
            free(tab_fiches);
            tab_fiches = NULL;
        }
        else
        {
            fprintf(stderr, "Erreur d'allocation mémoire!\n");
            system("pause");
            err = EXIT_FAILURE;
        }
     
        system("pause");
        printf("\n");
        return err;
    }
     
    static void purger(void)   // Fonction qui gère le flux d'entrée standard (stdin)
    {                          // car la première chaîne de caractère ne peut être lue.
        int c;                 // La cause venant de l'association des fonctions 
                               // scanf() et de fgets()
        while ((c = getchar()) != '\n' && c != EOF)
        {}
    }
     
    void fpurge(char *s_buff, FILE *fp)
    {
        char *pc = strchr(s_buff, '\n');
     
        if (pc != NULL)
        {
            *pc = 0;
        }
        else
        {
            int c;
            while ((c = fgetc(fp)) != '\n' && c != EOF)
            {
                continue;
            }
        }
    }
    Merci d'avance

  2. #2
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Je n'ai que regardé vite fait, mais il me semble que tu dépasses la taille du tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tab_fiches = malloc(nombrefiches * sizeof(*tab_fiches)); 
    
            for (i = 0; i < nombrefiches && end == 0; i++)
            {
                printf("Entrez la Fiche Personne n°%i :\n",i+1);
     
                fflush(stdout); // Vidage du tampon après chaque saisie
     
                if (fgets(tab_fiches[i+1], sizeof tab_fiches[i+1], stdin) != NULL)
                {
    Les tableau de taille n ont leurs indices de 0 à n-1.
    Il est plus clair de faire le sizeof avec des parenthèses. D'ailleurs chez moi cela ne compile même pas sans !

  3. #3
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Oui c'etait bien cela.

    Ca marche niquel maintenant.

    Merci de ton aide Jerome

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2006, 16h31
  2. [VBS] Recherche chaine de caractères dans un fichier
    Par parker13 dans le forum VBScript
    Réponses: 1
    Dernier message: 08/07/2006, 00h22
  3. Réponses: 3
    Dernier message: 07/06/2006, 14h40
  4. [VB]Recherche d'une chaine de caractère dans un fichier
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 16/02/2006, 09h10
  5. Ecriture d'une chaine de caractères dans un fichier
    Par fleur_de_rose dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 09h34

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