FILE di testo - saltare n righe

di il
4 risposte

FILE di testo - saltare n righe

/*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?

4 Risposte

  • Re: FILE di testo - saltare n righe

    Ma perché quella while(1==1) nel main??
  • Re: FILE di testo - saltare n righe

    Per un ciclo infinito
  • Re: FILE di testo - saltare n righe

    Ma non ti serve e comunque dovresti chiudere e riaprire il file per leggerlo nuovamente in un ciclo infinito.
  • Re: FILE di testo - saltare n righe

    Per dare l'effetto delle "righe saltate" potresti "sbattere fuori" la lettura dei dati da if( matricola == matricola_in ), così leggi tutto quanto in ogni caso ma lo prendi in considerazione per inviarlo in console solo se corrisponde alla matricola cercata. Prova a vedere se funziona (io non l'ho fatto).
    printf("Inserisci matricola: ");
    scanf("%d", &matricola_in);
    
    while( !feof(cfPtr) && trovato != 1 ){
    
        fscanf(cfPtr, "%d %s %s %d", &matricola, nome, cognome, &n_esami);
            
        for( somma = 0.0, i = 0; i < n_esami; i++ ){
            fscanf(cfPtr, "%d %d\n", &cod_esame, &voto);
            somma += voto;
        }
    
        if( matricola == matricola_in ){
            trovato = 1;
            printf("%.1f\n", (somma/n_esami));
        }
    }
Devi accedere o registrarti per scrivere nel forum
4 risposte