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!

Rispondi quotando