Ciao a tutti, devo svolgere il seguente esercizio:
Scrivere una funzione che riceva in ingresso una testa di lista i cui
elementi sono di tipo film_t, una stringa director corrispondente al
nome di un regista e un intero year corrispondente ad un anno. La
funzione cerca tutti i film del regista specificato da director,
prodotti prima dell’anno specificato da year e ne stampa a video le
relative informazioni. La funzione restituisce poi al chiamante anche
l’incasso complessivo di tutti film trovati.
Questa è la dichiarazione degli elementi di lista:
typedef struct film_t
char titolo[20];
char regista[30];
int annoProduzione;
int incasso;
film_t *next;
} film_t
Mi sono bloccato perchè non riesco a fare in modo di scorrere più volte la lista.. Mi spiego meglio, ho capito come cercare una singola info, ad esempio in questo codice cerco un particolare studente:
......
gets(name);
if (strcmp(testa->nome,name)==0)
{
printf("Nome: %s\n", testa->nome);
printf("Media: %d", testa->media);
}
else
{
tmp2=testa->next;
do
{
if (strcmp(tmp2->nome,name)==0)
{
printf("Nome: %s", tmp2->nome);
printf("Media: %d", tmp2->media);
trovato=1;
}
tmp2=tmp2->next;
}
while(trovato!=1);
}
break;
Ora dovrei con una procedura simile trovare la soluzione all'ese che ho presentato all'inizio, il problema è che non so come scorrere l'intera lista in cerca di più informazioni, senza uscire subito al primo valore trovato.. Ho provato a far così, ma come vedete mi sono bloccato..
Mi potreste gentilmente aiutare?
grazie
int cerca(film_t *testa,char director[],int year)
int cont=0;
film_t *temp,*temp2;
if(strcmp(testa->regista,director)==0)
{
if(testa->anno < year)
{
printf("titolo del film: %s",testa->titolo);
....
cont=cont + testa->incasso;
temp2=testa->next;
}
do{
if(strcmp(temp2->regista,director)==0)
{
if(temp2->anno < year)
{
printf("titolo del film: %s",temp2->titolo);
....
cont=cont + temp2->incasso;
temp2=temp2->next;
}
}
}
while(non lo so..);
else
temp2=testa->next;
do{
if(strcmp(temp2->regista,director)==0)
{
if(temp2->anno < year)
{
printf("titolo del film: %s",temp2->titolo);
....
cont=cont + temp2->incasso;
temp2=temp2->next;
}
}
}
while(non lo so..);
return(cont);
}