/*Sia dato un file testo studenti.txt contenente le informazioni sugli studenti. Le informazioni
sono così strutturate: Il primo rigo contiene la matricola dello studente il nome (una parola), il
cognome (una parola), seguiti dal numero n degli esami sostenuti. Seguono esattamente n righe
ognuna contenente un codice esame e un voto. Scrivere un ciclo infinito che prenda il input un
numero di matricola e (se presente) stampi in output la media dei voti.*/
#include <stdio.h>
void procedura( FILE* );
int main ()
{
FILE *cfPtr;
if( (cfPtr = fopen("studenti.txt", "r")) == NULL )
printf("Errore");
while( 1 == 1 ){
procedura(cfPtr);
}
fclose(cfPtr);
return 0;
}
void procedura( FILE* cfPtr )
{
int matricola, matricola_in, n_esami, cod_esame, voto, trovato = 0;
char nome[30], cognome[30], i;
float somma = 0.0;
printf("Inserisci matricola: ");
scanf("%d", &matricola_in);
while( !feof(cfPtr) && trovato != 1 ){
fscanf(cfPtr, "%d %s %s %d", &matricola, nome, cognome, &n_esami);
if( matricola == matricola_in ){
trovato = 1;
somma = 0.0;
for( i = 0; i < n_esami; i++ ){
fscanf(cfPtr, "%d %d\n", &cod_esame, &voto);
somma += voto;
}
printf("%.1f\n", (somma/n_esami));
}
else{
for( i = 0; i < n_esami; i++ ){
/*salta righe<<, come faccio?*/
}
}
}
}
Il file è così strutturato:
2342 Silvia Rossi 3
180 28
335 30
450 30
3456 Gennaro Esposito 2
170 18
500 20
2323 Paolo Rossi 1
500 30
se inserisco le matricole nell'ordine in cui compaiano, il tutto mi funziona. Ma se come prima matricola inserisco 3456, non mi stampa nulla. Cerco un modo per dirgli che se la matricola che legge non coincide con quella richiesta, deve scendere di n_esami-righe altrimenti la prossima sequenza di record che legge sarà: codice voto (errata). Aiuti?