salve,
avrei questo programma da creare:
Creare i file libri.h e libri.c che consentano di utilizzare la seguente struttura:
codice:
struct libro {
unsigned int codice;
char titolo[255];
unsigned int pagine;
};
e la funzione:
codice:
struct libro *filtra_libri (struct libro *plibri, unsigned int *pn, const char *cerca);
La struttura contiene il campo codice che contiene un identificatore di un libro, il campo titolo che ne contiene il titolo (che può includere degli spazi) e il campo pagine che contiene il numero di pagine. La funzione accetta come parametro plibri, un puntatore ad una zona di memoria contenente un numero di libri indicato dal valore puntato da pn. Accetta inoltre una stringa zero terminata cerca. La funzione deve ritornare un puntatore ad una nuova zona di memoria (allocata dinamicamente nell’heap) contenente tutti i libri nel cui titolo è presente la stringa contenuta in cerca e impostare il valore puntato da pn al numero di libri ritornati. Se nessun libro contiene la stringa, la funzione deve ritornare NULL e impostare il valore puntato da pn a 0.
Io l'ho fatto cosi:
codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct libro{
unsigned codice;
char titolo[255];
unsigned pagine;
};
struct libro *filtra_libri(struct libro *plibri,unsigned int *pn,const char *cerca){
struct libro*lib=NULL;
int i=0,j=0,k=0,l=0,*m=0,c=*m;
lib=(struct libro*)realloc(lib,(i+1)*sizeof(struct libro));
while(plibri[c].codice>0){
while(plibri->titolo[j]!='\0'){
if(plibri->titolo[j]==cerca[l]){
k+=1;
l++;
}j++;
}
if(k>0)
{
lib->codice=plibri->codice;
strcpy(lib->titolo,plibri->titolo);
lib->pagine=plibri->pagine;
i++;
}
else {
*pn=0;
return NULL;
}*pn=i;
*m++;
return lib;
}
}
main(){
int i,j,k,p=0;
unsigned pn;
struct libro libb[40],*lib=NULL;
char cerca[]={"del"};
printf("Quanti libri vuoi inserire: ");
scanf("%d",&i);
for(j=0;j<i;j++){
printf("Inserisci il %d codice: ",j+1);
scanf("%d",&libb[j].codice);
fflush(stdin);
printf("Inserisci il Titolo: ");
gets(libb[j].titolo);
fflush(stdin);
printf("Inserisci le Pagine: ");
scanf("%d",&libb[j].pagine);
fflush(stdin);
}
lib=(struct libro*)realloc(lib,(p+1)*sizeof(struct libro));
do{
lib[p]=*filtra_libri(libb,&pn,cerca);
}while(filtra_libri(libb,&pn,cerca)==NULL);
for(k=0;k<pn;k++){
printf("%d; %s; %d\n",lib[k].codice,lib[k].titolo,lib[k].pagine);
}
}
il problema è che mi stampa solo un libro con quel titolo e non gli altri che sono presenti nella struct,cs sbaglio?