Ecco il codice del main che ho scritto.
Il problema è che quando ho due studenti della solita città, del primo mi stampa tutti i dati correttamente, del secondo mi stampa correttamente il nome e la matricola, ma gli assegna gli esami e la media del primo studente! Qualcuno può aiutarmi?
codice:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
typedef struct {
int Matr;
char Nome[20];
char Citta[20];
} Studente;
typedef struct {
int Matr;
char Esame[15];
int Voto;
} Esame;
int calcolaMedia (int somma, int esami) {
int media;
if (esami == 1) media = somma;
else media = somma / esami;
return media;
}
int calcolaSomma (int voto) {
int somma;
somma = voto;
return somma;
}
main()
{
FILE *fp;
FILE *f;
Studente s;
Esame e;
char citta[20];
int esami = 0;
int somma = 0;
int media, trovatoEsame = 0;
if ((fp = fopen("Studenti.dat", "rb")) == NULL) {
fprintf(stderr, "Errore di apertura\n");
exit(1);
}
if ((f = fopen("Esami.dat", "rb")) == NULL) {
fprintf(stderr, "Errore di apertura 2\n");
exit(2);
}
printf("Citta da cercare: ");
scanf("%s", citta);
while (fread(&s, sizeof(Studente), 1, fp)>0) {
if (strcmp(citta,s.Citta)==0) {
while (fread(&e, sizeof(Esame), 1, f)>0) {
if (s.Matr == e.Matr) {
trovatoEsame = 1;
do {esami++;} while (s.Matr != e.Matr);
do {somma = somma + calcolaSomma(e.Voto);} while (s.Matr != e.Matr);
media = calcolaMedia(somma, esami); }}
if (trovatoEsame)
printf("%d %s %d %d\n\n", s.Matr, s.Nome, esami, media);
}
}
fclose(fp);
fclose(f);
getch();
}
Dove sbaglio?
GRAZIE MILLE!