annuaire.c
00001 #include <stdint.h>
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <string.h>
00005
00006 #define STR_SIZE 50 // Taille maximale d'une chaine de caractères
00007 #define MAX_PERS 100 // Taille maximale de l'annuaire
00008 #define ANNUAIRE "annuaire.txt" // Le nom du fichier sauvegardant l'annuaire
00009
00010 struct personne {
00011 char nom[STR_SIZE], prenom[STR_SIZE], tel[STR_SIZE];
00012 int age;
00013 };
00014
00015 void error(char * msg) {
00016 perror(msg);
00017 exit(EXIT_FAILURE);
00018 }
00019
00020 int main()
00021 {
00022 struct personne tab[MAX_PERS] = {
00023 {"Varrette", "Sébastien", "+33 (0)0 11 22 33 44", 26},
00024 {"Bernard", "Nicolas", "+33 (0)0 55 66 77 88", 25},
00025 {"", "", "", -1}
00026 };
00027
00028
00029 FILE * fich = fopen(ANNUAIRE, "w");
00030 if ( fich == NULL ) error("[Erreur] fopen (write)");
00031
00032 fseek(fich, 2, SEEK_SET);
00033 uint16_t i = 0;
00034 while (strlen(tab[i].nom) > 0) {
00035 fwrite(&tab[i], sizeof(struct personne), 1, fich);
00036 i++;
00037 }
00038 fseek(fich, 0, SEEK_SET);
00039 fwrite(&i, 2, 1, fich);
00040 fclose(fich);
00041
00042
00043 struct personne buffer;
00044 uint16_t nb_pers = 0;
00045 fich = fopen(ANNUAIRE, "r");
00046 if ( fich == NULL ) error("[Erreur] fopen (write)");
00047
00048 fread(&nb_pers, 2, 1, fich);
00049 for (int i = 0; i < nb_pers; i++) {
00050 if (fread(&buffer, sizeof(struct personne), 1, fich) != 1) break;
00051 printf("Entrée %d\n", i + 1);
00052 printf("\t %s %s (age: %d) --> %s\n",
00053 buffer.nom, buffer.prenom, buffer.age, buffer.tel);
00054 }
00055 fclose(fich);
00056 return 0;
00057 }