Mi devi scusare ma non ho capito moltissimo, se possibile ti chiederei di apportare le modifiche necessarie a tale lista affinchè poi faccia ciò che dice la consegna...( spero mi aiuterai..):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STR 32
#define FILENAME "test.dat"
struct libro{
char autore[MAX_STR];
char ce[MAX_STR];
char ap[MAX_STR];
struct libro *next;
};
typedef struct libro libro;
typedef struct libro *libro_p;
libro_p Add_to_list(libro_p begin,char autore[],char ce[],char ap[]);
libro_p Add_in_order(libro_p head,char autore[],char ce[],char ap[]);
void print_list(libro_p p);
int Save_to_file(libro_p begin,char file_name[]);
int getline(char buffer_line[],int);
//int Search_in_list(libro_p head,char trial[]);
libro_p Read_from_file(libro_p begin,char file_name[]);
main()
{
char buffer_autore[MAX_STR];
char buffer_ce[MAX_STR];
char buffer_ap[MAX_STR];
char line[MAX_STR];
int cont;
char trial[MAX_STR];
libro_p head=NULL;
printf("Inserimento dati. . .\n\n");
head=Read_from_file(head,FILENAME);
if(head!=NULL)
{
printf("\nEcco i dati dal file %s:\n\n",FILENAME);
print_list(head);
}
while(cont)
{
printf("\nInserire l'autore del libro:\n");
getline(buffer_autore,MAX_STR);
if(strcmp(buffer_autore,"exit")==0)
break;
printf("Inserire la casa editrice:\n");
getline(buffer_ce,MAX_STR);
if(strcmp(buffer_ce,"exit")==0)
break;
printf("Inserire l'anno di publicazione:\n");
getline(buffer_ap,MAX_STR);
if(strcmp(buffer_ap,"exit")==0)
break;
printf("\n\nPer terminare digitare exit. . .\n\n");
if(strcmp(buffer_autore,"")!=0&&strcmp(buffer_ce,"")!=0&&strcmp(buffer_ap,"")!=0)
libro_p Add_to_list(libro_p begin,char autore[],char ce[],char ap[]);
head=Add_in_order(head,buffer_autore,buffer_ce,buffer_ap);
}
//printf("\n\nInserire dati per la ricerca: ");
//scanf("%s",trial);
//Search_in_list(head,trial);
Save_to_file(head,FILENAME);
printf("Indice: \n\n");
print_list(head);
system("pause");
return 0;
}
libro_p Add_to_list(libro_p begin,char autore[],char ce[],char ap[])
{
libro_p p;
libro_p curr;
p=(libro*)malloc(sizeof(libro));
strcpy(p->autore,autore);
strcpy(p->ce,ce);
strcpy(p->ap,ap);
p->next=NULL;
if(begin==NULL)
return p;
else
{
begin=curr;
while(curr->next!=NULL)
curr=curr->next;
curr->next=p;
return begin;
}
}
int Save_to_file(libro_p begin,char file_name[])
{
libro_p p;
FILE *fp;
printf("Salvataggio. . .\n\n");
fp=fopen(file_name,"w");
if(fp==NULL)
{
printf("Impossibile aprire in scrittura il file %s. . .\n\n",file_name);
return -1;
}
p=begin;
while(p!=NULL)
{
fwrite(p,sizeof(libro),1,fp);
p=p->next;
}
return 0;
}
libro_p Read_from_file(libro_p begin,char file_name[])
{
libro_p start;
libro libro_item;
FILE *fp;
int n;
start=begin;
fp=fopen(file_name,"r");
if(fp==NULL)
{
printf("Impossibile aprire il file %s in lettura. . .\n\n",file_name);
printf("Nessun archivio importato!!\n\n");
return begin;
}
start=begin;
while(n>0)
{
n=fread(&libro_item,sizeof(libro),1,fp);
printf("%d %4s %4s %4s \n",n,libro_item.autore,libro_item.ce,libro_item.ap);
if(n>0)
start=Add_in_order(start,libro_item.autore,libro_item.ce,libro_item.ap);
}
return start;
}
void print_list(libro_p p)
{
if(p!=NULL)
{
printf("\n%4s %4s %4s \n\n",p->autore,p->ce,p->ap);
p=p->next;
print_list(p);
}
}
/*int Search_in_list(libro_p head,char trial[])
{
printf("\n\nRicerca elementi in lista...\n");
if(head==NULL)
{
printf("\nImpossibile individuare il percorso specificato\n");
return -1;
}
while(head!=NULL)
{
if(strcmp(head->autore,trial)==0||strcmp(head->ce,trial)==0||strcmp(head->ap,trial)==0)
{
printf("\n\nElemento trovato!!\n");
return 1;
}
else
printf("Elemento non trovato!!\n\n");
head=head->next;
}
return 0;
}*/
void insert(libro_p a,libro_p b,libro_p q)
{
if(a->next!=b)
{
printf("Errore nella lista\n\n");
return;
}
a->next=q;
q->next=b;
}
libro_p Add_in_order(libro_p head,char autore[],char ce[],char ap[])
{
libro_p p;
libro_p temp;
libro_p temp_pre;
p=(libro_p)malloc(sizeof(libro));
strcpy(p->autore,autore);
strcpy(p->ce,ce);
strcpy(p->ap,ap);
p->next=NULL;
if(head==NULL)
return p;
else
{
if(strcmp(autore,head->autore)<0)
{
p->next=head;
return p;
}
temp=head;
temp_pre=head;
while(temp!=NULL)
{
if(strcmp(autore,temp->autore)<0)
{
insert(temp_pre,temp_pre->next,p);
return head;
}
temp_pre=temp;
temp=temp->next;
}
insert(temp_pre,temp_pre->next,p);
return head;
}
}
int getline(char buffer_line[],int Max_l)
{
int c,i;
i=0;
while((c=getchar())!='\n'&&i<Max_l)
buffer_line[i++]=c;
buffer_line[i]='\0';
return i;
}
Ti riporto pjure il testo per completezza:Creare un programma che attraverso la dichiarazione di una struttura opportuna permetta di
gestire i dati di un insieme rilevazioni meteorologiche (si considerino almeno tre campi per
la struttura). Il programma deve permettere di :
• creare una lista ordinata in relazione all’ordine di immissione
• creare una lista ordinata in relazione ad un campo della struttura
• stampare della lista
• salvare su file i dati
• leggere da file i dati salvati(ovviamente qui si parla di altra lista , sono io che l'ho modificata )