ho fatto questo programma
codice:

#include <stdio.h>
#define n 2

struct riga {
        char nome[15];
        int punti;
} ri[n];

int main()
{
    int i, j;
    int agg_punti;
    char buffer[15];
    int app;

    printf("Inserisci la classifica\n\n");
    for ( i = 0; i < n; i++ ) {
        printf("Inserisci la squadra in posizione %d\n", n - i);
        scanf("%s", ri[i].nome);
        printf("Inserisci il punteggio della squadra in posizione %d\n", n - i);
        scanf("%d", &ri[i].punti);
    }


    FILE *cfPtr;

    if ((cfPtr = fopen("classifica.dat", "wb")) == NULL ) {
        printf("Il file non pò essere aperto.\n");
    } else {
        for ( i = 0; i < n; i++ ) {
            fwrite( &ri, sizeof(struct riga), 1, cfPtr);
        }
        fclose(cfPtr);
    }

    if((cfPtr = fopen("classifica.dat", "rb")) == NULL ) {
        printf("Il file non può essere aperto.\n");
    } else {
        printf("%28s", "CLASSIFICA\n");
        printf("%15s%20s", "SQUADRA", "PUNTI\n");
        while ( !feof(cfPtr) ) {
            fread( &ri, sizeof( struct riga), 1, cfPtr);
        }
        for ( i = 0; i < n; i++ ) {
            printf("%15s%19d", ri[i].nome, ri[i].punti);
            printf("\n");
            }
    fclose(cfPtr);
    }
    printf("\n\n");
    for ( i = 0; i < n; i++ ) {
        printf("Inserisci i punti conseguiti dalla squadra %s : \n", ri[i].nome);
        scanf("%d", &agg_punti);
        ri[i].punti += agg_punti;
    }

    for ( i = 0; i < n - 1; i++ ) {
        for ( j = i + 1; j < n; j++ ) {
            if ( ri[i].punti < ri[j].punti ) {
                strcpy( buffer, ri[i].nome);
                strcpy(ri[i].nome, ri[j].nome);
                strcpy(ri[j].nome, buffer);
                app = ri[i].punti;
                ri[i].punti = ri[j].punti;
                ri[j].punti = app;
            }
        }
    }

    printf("%33s", "CLASSIFICA AGGIORNATA\n");
    printf("%15s%20s", "SQUADRA", "PUNTI\n");
    for ( i = 0; i < n; i++ ) {
            printf("%15s%19d", ri[i].nome, ri[i].punti);
            printf("\n");
            }

    if ((cfPtr = fopen("classifica.dat", "wb")) == NULL ) {
        printf("Il file non può essere aperto.\n");
    } else {
        for (i = 0; i < n; i++) {
        fwrite(&ri, sizeof( struct riga), 1, cfPtr);
        }
        fclose(cfPtr);
    }
    return 0;
}
Nella parte relativa alla lettura dal file, cioè
codice:
if((cfPtr = fopen("classifica.dat", "rb")) == NULL ) {
        printf("Il file non può essere aperto.\n");
    } else {
        printf("%28s", "CLASSIFICA\n");
        printf("%15s%20s", "SQUADRA", "PUNTI\n");
        while ( !feof(cfPtr) ) {
            fread( &ri, sizeof( struct riga), 1, cfPtr);
        }
        for ( i = 0; i < n; i++ ) {
            printf("%15s%19d", ri[i].nome, ri[i].punti);
            printf("\n");
            }
    fclose(cfPtr);
    }
non sono sicuro se vado a "stampare" a video leggendo i dati prendendoli dal file per portarli nella struct e poi "stampandoli" oppure se vado a prenderli direttamente dalla struct e quindi "stampandoli" a video...che ne dite?