Abbiamo un tipo Prodotto_t che contiene informazioni sui prodotti di un supermercato. Ogni Prodotto_t è pensato per far parte di una lista; contiene quindi un riferimento al nodo successivo.
Per creare la lista di prodotti utilizzo un doppio puntatore a Prodotto_t.
Il mio dubbio è su queste due funzioni: è giusto procedere in questo modo? E' sensato creare un doppio puntatore che sarà la lista dei nostri prodotti e poi aggiungervi un prodotto.
codice:
/*
** Inizializza il primo elemento della lista a NULL.
*/
void inizialista(Prodotto_t **lista)
{
*lista = NULL;
}
/*
** Acquista quantita elementi di product e li inserisce nella lista.
** Restituisce errore se il prodotto non è valido o la quantità inserita è minore
** di zero.
*/
void buyprodotto(Prodotto_t **list, Prodotto_t *product, int quantita)
{
if (quantita <= 0)
{
fprintf(stderr, "addprodotto: Quantita non valida\n");
return;
}
if (product == NULL)
{
fprintf(stderr, "addprodotto: Prodotto non valido\n");
return;
}
//Definisco la quanttà di prodotto da aggiungere
product->quantita = quantita;
Prodotto_t *current;
if (*list == NULL)
{
*list = product;
}
else
{
current = *list;
while ( current != NULL && current->codice != product->codice)
current = current->next;
if (current == NULL) //arrivati alla fine della lista, prodotto non ancora presente
current = product;
else //trovato prodotto con lo stesso codice
current->quantita += product->quantita;
}
}
Grazie mille a tutti epr l'aiuto.