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;
}
}
} |
Partager