Uso delle funzioni con strutture: filtro
Immaginiamo di volere un array con solo gli animali con un prezzo inferiore ai 700 euro.
Creiamo la funzione filtra_prezzo
per questo scopo.
struct Animale *filtra_prezzo(struct Animale animali[], int n, int *counter) {
struct Animale *arr_out = malloc(sizeof(struct Animale) * n);
for (int i = 0; i < n; i++) {
if (animali[i].prezzo_vendita <= 700.0F) {
arr_out[*counter] = animali[i];
(*counter)++;
}
}
arr_out = realloc(arr_out, sizeof(struct Animale) * (*counter));
return arr_out;
}
Ora testiamo la funzione nel main, per controllare che il nuovo array contenga effettivamente solo gli animali con il prezzo richiesto.
int main() {
struct Animale animali[] = {
{"gatto", "siamese", 100, 1.2F, "cibo per gatti", 600.00F},
{"cane", "labrador", 80, 5.5F, "croccantini", 800.00F}};
int counter = 0;
struct Animale *animaliEconomici =
filtra_prezzo(animali, 2, &counter);
for (int i = 0; i < counter; i++) {
stampa_animale(animaliEconomici[i]);
}
free(animaliEconomici);
}