Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char nome[10];
long punti;
} rank;
void menu ();
void inizializza(rank **V,int *pn);
void leggi(rank **V,int *pn);
void visualizza(rank *V,int n);
void salva(rank *V,int n);
main ()
{
rank *A;
int i;
int n=5;
int load;
int sel;
printf("Se ci sono dati salvati premere 1");
scanf("%d",&load);
if (load==1) inizializza(&A,&n);
else malloc(n*sizeof(rank));
do{
menu();
scanf("%d",&sel);
switch(sel){
case 1:leggi(&A,&n);
break;
case 2:visualizza(A,n);
break;
case 3:salva(A,n);
break;
default:;
}
}while(sel!=0);
}
void menu ()
{
printf("---------------\n1-Inserisci record\n2-Visualizza\n3-Salva\n-------->");
}
void inizializza(rank **V,int *pn)
{
FILE *pf;
pf=fopen("records.dat","r+");
long pos,dim;
fseek(pf,0,SEEK_END);
dim=ftell(pf);
int num=0;
num=dim/sizeof(rank);
*V=malloc(num*sizeof(rank));
if (pf!=NULL)
{
fread(V,sizeof(rank),num,pf);
(*pn)=num;}
else pf=fopen("records.dat","w+");
fclose(pf);
}
void leggi(rank **V,int *pn)
{
*V=realloc(*V,sizeof(rank)*((*pn)+1));
printf("Nome:");
scanf("%s",&(*V)[*pn].nome);
printf("Punteggio:");
scanf("%ld",&(*V)[*pn].punti);
(*pn)++;
}
void visualizza(rank *V,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s \t%ld\n",V[i].nome,V[i].punti);
}
}
void salva(rank *V,int n)
{
FILE *pf;
int i;
pf=fopen("records.dat","w");
for(i=0;i<n;i++)
fwrite(V,sizeof(rank),1,pf);
fclose(pf);
}
Ecco gli errori che da il compilatore:
In function `void inizializza(rank**, int*)':
65 invalid conversion from `void*' to `rank*'
In function `void leggi(rank**, int*)':
79 invalid conversion from `void*' to `rank*'
Dov'è l'errore?
Vi informo che di questo programma ho creato una versione con allocazione statica e poi l'ho modifica per provare l'allocazione dinamica
Mi sono dimenticato di mettere il free ma non penso che sia quello il problema