Questo è tutto il codice che riguarda l'apertura del file, la struttura dati e la stampa
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define R 30
#define C 100
#define L 20
typedef struct {
char nome[L];
char cognome[L];
char esamiSvolti[R][C];
int votiEsami[R];
int numeroEsami;
float mediaEsami;
} Studente;
/* Funzione principale */
int main(){
Studente *studente;
char nome[L], cognome[L], file[L];
int i;
// Alloco lo spazio in memoria
studente = (Studente*)malloc(sizeof(Studente));
// Acquisisco dati necessari per l'apertura del file..
// Chiamo la funzione di lettura da file a cui passo la struttura dati
leggiDaFile(file, studente);
// Stampa
printf("\nLo studente %s %s ha svolto i seguenti esami:\n", studente->nome, studente->cognome);
for(i=0; i<studente->numeroEsami; i++) { // ciclo da 0 a numeroEsami
printf("Esame: %sVoto: %d\n", studente->esamiSvolti[i], studente->votiEsami[i]);
}
// Stampa della media con 2 cifre decimali
printf("La sua media e' di: %.2f\n\n", studente->mediaEsami);
system("PAUSE");
return 0;
}
void leggiDaFile(char file[], Studente *studente) {
FILE *fp;
int voto, sommaVoti=0, i=0, j;
char esame[C];
fp=fopen(file, "r");
while(!feof(fp)) {
fgets(studente->esamiSvolti[i], C, fp);
fscanf(fp, "%d", &studente->votiEsami[i]);
sommaVoti += studente->votiEsami[i];
i++;
}
studente->numeroEsami = i;
studente->mediaEsami = (float)sommaVoti/i;
fclose(fp);
}