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