Ragazzi ecco il programma:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ISBN_TYPE 13
struct libri
{
char* ISBN;
int anno;
char* autore;
char* titolo;
float prezzo;
};
typedef struct albero* ramo;
struct albero
{
int n;
struct libri item;
ramo destro;
ramo sinistro;
};
ramo costruiscialbero(ramo p, struct libri m);
int main()
{
ramo inizioalbero=NULL;
struct libri item;
item.ISBN=malloc(sizeof(char)* (ISBN_TYPE +1));
item.autore=malloc(sizeof(char)*256);
item.titolo=malloc(sizeof(char)*256);
FILE* fp;
fp=fopen("books.txt","r");
if(fp==NULL)
{ printf("Errore nell'apertura del file"); return 0;}
while(!feof(fp))
{
fscanf(fp,"%256[^;];%d;%256[^;];%256[^;];%2f\n",item.ISBN,&(item.anno),item.autore,item.titolo,&(item.prezzo));
inizioalbero=costruiscialbero(inizioalbero,item);
}
fclose(fp);
system("PAUSE");
return 0;
}
ramo costruiscialbero(ramo p, struct libri m)
{
if(p==NULL)
{
p=malloc(sizeof(struct albero));
p->item.ISBN=malloc(sizeof(char)*(ISBN_TYPE +1));
strcpy(p->item.ISBN,m.ISBN);
p->item.anno=m.anno;
p->item.autore=malloc(sizeof(char)*(ISBN_TYPE +1));
strcpy(p->item.autore,m.autore);
p->item.titolo=malloc(sizeof(char)*(ISBN_TYPE +1));
strcpy(p->item.titolo,m.titolo);
p->item.prezzo=m.prezzo;
p->n=0; p->destro=NULL; p->sinistro=NULL;}
else {p->n++; if(strcmp(p->item.ISBN,m.ISBN < 0))
p->sinistro=costruiscialbero(p->sinistro,m);
else p->destro=costruiscialbero(p->destro,m);}
return (p);
}
Il problema sussiste nella funzione costruiscialbero. Si avvia ma crasha. Come mai?
AGGIORNAMENTO: inserendo dei printf per vedere dove crashava ho scoperto che il problema nasce nel momento della chiamata alla funzione ricorsiva dell'albero. Soluzioni?