Uso delle funzioni con strutture: mappatura

Immaginiamo di voler inserire gli animali in un catalogo, nel quale perĂ² ci interessa salvare solo specie e razza; vogliamo inoltre aggiungere un identificativo sotto forma di numero intero.

Creiamo una nuova struct AnimaleCatalogo e la relativa funzione di stampa.

struct AnimaleCatalogo {
  char specie[20];
  char razza[20];
  int id; // identificativo
};

// Creo la funzione di stampa della nuova struct
void stampa_animale_catalogo(struct AnimaleCatalogo animale) {
  printf("animaliCatalogo: id %d, specie %s, razza %s\n", animale.id,
         animale.razza, animale.specie);
  return;
}

Ora scriviamo la funzione che mappa l'array degli animali con quelli di animali catalogo. Copiamo solo i campi che ci interessano e per gli altri mettiamo dei valori di default come richiesto dallo scenario.

void mappa_catalogo(struct Animale arr_in[],
                    struct AnimaleCatalogo arr_out[], int len) {
  for (int i = 0; i < len; i++) {
    strncpy(arr_out[i].specie, arr_in[i].specie, 20);
    strncpy(arr_out[i].razza, arr_in[i].razza, 20);
    arr_out[i].id = i; // come identificativo metto la posizione nell'array
  }
  return;
}

int main() {
  struct Animale animali[] = {
      {"gatto", "siamese", 100, 1.2F, "cibo per gatti", 600.00F},
      {"cane", "labrador", 80, 5.5F, "croccantini", 800.00F}};
  struct AnimaleCatalogo animaliCatalogo[2];
  mappa_catalogo(animali, animaliCatalogo, 2);

  for (int i = 0; i < 2; i++) {
    stampa_animale_catalogo(animaliCatalogo[i]);
  }
  return 0;
}