Il codice delle funzioni è completo.
Codice atttuale:
struct comp
{
int code;
char name[25];
char des[100];
int disp;
struct comp *n;
};
struct comp *comps = 0;
int totc = 0;
void apri()
{
char *path = malloc(sizeof(char) * 50);
int ch, i = 0;
FILE *fr;
struct comp *p, *c, *nn = malloc(sizeof(struct comp));
fprintf(stderr, "\nInserisci il percorso e il nome del file: ");
fflush(stdin);
while((ch = getc(stdin)) != '\n' && i < 256)
{
path[i++] = ch;
}
path[i] = '\0';
totc = 0;
if(fr = fopen(path, "rb"))
{
int ch, i = 0;
//------------------------------------------------
p = 0;
c = comps;
fread(&nn->code, sizeof(int), 1, fr);
getc(fr);
ch = getc(fr);
while(ch != '\n' && ch != 1)
{
nn->name[i++] = ch;
ch = getc(fr);
}
nn->name[i] = '\0';
i = 0;
ch = getc(fr);
while(ch != '\n' && ch != 1)
{
nn->des[i++] = ch;
ch = getc(fr);
}
nn->des[i] = '\0';
fread(&nn->code, sizeof(int), 1, fr);
getc(fr);
nn->n = c;
comps = nn;
totc++;
//------------------------------------------------
while(feof(fr) == 0)
{
nn = malloc(sizeof(struct comp));
fread(&nn->code, sizeof(int), 1, fr);
getc(fr);
ch = getc(fr);
while(ch != '\n' && ch != 1)
{
nn->name[i++] = ch;
ch = getc(fr);
}
nn->name[i] = '\0';
i = 0;
ch = getc(fr);
while(ch != '\n' && ch != 1)
{
nn->des[i++] = ch;
ch = getc(fr);
}
nn->des[i] = '\0';
fread(&nn->code, sizeof(int), 1, fr);
getc(fr);
nn->n = c;
p->n = nn;
totc++;
}
}
fclose(fr);
fflush(NULL);
}
void salva()
{
char *path = malloc(sizeof(char) * 50);
int ch, i = 0;
FILE *fw;
struct comp *p;
fprintf(stderr, "\nInserisci il percorso e il nome del file: ");
fflush(stdin);
while((ch = getc(stdin)) != '\n' && i < 256)
{
path[i++] = ch;
}
path[i] = '\0';
if(fw = fopen(path, "wb"))
{
for(p = comps; p; p = p->n)
{
fwrite(&p->code, sizeof(int), 1, fw);
fputc(1, fw);
fwrite(p->name, sizeof(char), strlen(p->name), fw);
fputc(1, fw);
fwrite(p->des, sizeof(char), strlen(p->des), fw);
fputc(1, fw);
fwrite(&p->disp, sizeof(int), 1, fw);
fputc('\n', fw);
}
}
fclose(fw);
fflush(NULL);
}
Ancora qualche problema nella lettura: ho scritto tre strutture collegate in un file; dopo la lettura della seconda il programma restituisce un errore.