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?