Bonjour, en ce moment je dois faire un projet en C où je dois créer un programme qui gère les différents logements d'un Crous.

J'ai un fichier Etudiant qui contient certaines caractéristiques à leur propos.

Pour les manipuler, j'ai choisi de créer un tableau de structure avec une allocation dynamique.

Mon problème est que j'utilise mal le flot de la fonction de lecture du fichier (Enfin je pense).

Nom : sixieme.PNG
Affichages : 710
Taille : 28,4 Ko : Voilà à quoi ressemble le fichier texte.

Nom : septieme.PNG
Affichages : 653
Taille : 8,3 Ko : Voilà ce qu'affiche la console lorsque je mets un printf("%s", a.prenom); Dans la fonction LireEtudiant.

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
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef enum{Non, Oui} Booleen;
 
typedef struct{
    int idEtudiant;
    char Civilite;
    char prenom[16];
    char nom[16];
    Booleen Boursier;
    int Echelon;
    Booleen Handicape;
}Etudiant;
 
Etudiant LireEtudiant(FILE *flot){
 
    Etudiant a;
 
    fscanf(flot, "%d%c%*c", &a.idEtudiant, &a.Civilite);
    fscanf(flot, "%s %s", a.prenom, a.nom);
    fscanf(flot, "%d\t%d\t%d", &a.Boursier, &a.Echelon, &a.Handicape);
    printf("%s\n", a.prenom);
    return a;
 
}
 
 
Etudiant * ChargeEtudiant(int *nb, int *max){
 
    Etudiant *tab, *aux, a;
    FILE *flot;
    flot= fopen("Etudiants.txt", "r");
    if(flot==NULL){
        printf("Erreur d'ouverture du fichier.\n");
        exit(1);
    }
 
    *nb=0;
    *max=100;
 
    tab=(Etudiant*) malloc((*max)*sizeof(Etudiant));
    if(tab==NULL){
        printf("Erreur malloc.\n");
        exit(1);
    }
 
    a= LireEtudiant(flot);
 
    while(!feof(flot)){
 
        if(*nb==*max){
 
            aux=(Etudiant*) realloc(tab, (*max+100)*sizeof(Etudiant));
            if(aux==NULL){
                printf("Erreur Realloc.\n");
                exit(1);
            }
 
            tab=aux;
            *max+=100;
 
        }
 
        tab[*nb]= a;
        *nb+=1;
        a= LireEtudiant(flot);
 
    }
 
    fclose(flot);
    free(aux);
    return tab;
 
}
 
void AfficherEtudiants(Etudiant *tab, int nb){
 
    int i=0;
 
    while(i<nb){
 
        printf("%d\t%c\t%s\t%s", tab[i].idEtudiant, tab[i].Civilite, tab[i].prenom, tab[i].nom);
        switch(tab[i].Boursier){
            case 1:
                printf("\tNon");
                break;
            case 0:
                printf("\tOui");
                break;
        }
 
        printf("\t%d", tab[i].Echelon);
 
        switch(tab[i].Handicape){
            case 1:
                printf("\tNon\n");
                break;
            case 0:
                printf("\tOui\n");
                break;
        }
 
        i+=1;
 
    }
 
}
Voilà le code. Désolé pour les éventuelles erreurs bêtes.

Merci d'avance.