/* Création d'un type structuré (ici pour le test), adapté aux données à créer/à lire : */
typedef struct
{
    char nom[10];
    short int an_nais;
} T_PERS ;
void main( void )
{
    FILE* fic ;
    T_PERS pers ;
    T_PERS tab_pers[4]=
    {
        {"Luc", 1970}, {"Li", 1920}, {"Zoé", 1960}, {"Léa", 1975}
    };
    short int num=-1, err, nb_enreg;
    long int offset ;
    /* Création du fichier de données de test (il contient 7 enregistrements) : */
    fic = fopen( "exemple.dat, "wb") ;
                 if (fic==NULL) { printf("Ouverture fichier impossible !"); exit(0); }
                 fwrite( tab_pers, sizeof(T_PERS), 4, fic); /* on crée 7 enregistrements (en 2 fois : 4+3) */
                 fwrite( tab_pers, sizeof(T_PERS), 3, fic);
                 fclose( fic ) ;
                 /* Le fichier de données est maintenant enregistré sur le disque dur. */
                 /* Lecture d'un seul enregistrement "au milieu" du fichier : */
                 /* On détermine d'abord le nombre total d'enregistrements stockés dans le fichier : */
                 nb_enreg = taille_fichier("exemple.dat") / sizeof(T_PERS);
                 /* la fonction taille_fichier est celle de l'exemple précédent */
                 /* il faudrait vérifier que nb_enreg est non nul ...*/
                 /* Ouverture du fichier : */
                 fic = fopen( "exemple.dat, "rb") ;
    if (fic==NULL)
    {
        printf("Ouverture fichier impossible !");
        exit(0);
    }
    /* On saisit au clavier le numéro de l'enregistrement à lire (saisie protégée) : */
    printf("Quel enregistrement (entre 0 et %hd) voulez-vous lire ? ", nb_enreg-1);
    while ( (scanf("%hd",&num)==0) || (num<0) || (num>=nb_enreg) )
    {
        printf("\n Tapez un numéro entre 0 et %hd ! ", nb_enreg-1);
        fflush(stdin);
        num=-1;
    }
    /* On positionne le pointeur de fichier sur l'enregistrement voulu (avec fseek) : */
    offset = num * sizeof(T_PERS) ;
    err = fseek( fic, offset, SEEK_SET ) ; /* SEEK_SET = à partir du début du fichier */
    if ( err != 0)
    {
        puts("Pb de positionnement par fseek !");
        exit(0);
    }
    /* On lit un seul enregistrement, qu'on range dans la variable structurée pers : */
    if ( fread( &pers, sizeof(T_PERS), 1, fic) == 1 )
        printf("\n Enregistrement %hd : %s %hd\n", num, pers.nom, pers.an_nais );
    else
    {
        puts("Pb de lecture fichier !");
        exit(0);
    }
    fclose( fic ) ;
}
