Strutture

Le strutture sono tipi di dato che permettono di raggruppare insieme più variabili per creare qualcosa di semanticamente più elaborato.

Vedi capitolo del libro A7 a pag.A187

Immaginiamo ad esempio di voler memorizzare le informazioni riguardanti gli studenti di una classe. Posso creare una struct che contenga tutte le informazioni insieme:

struct Nominativo {
  char nome[20];
  char indirizzo[20];
  unsigned int anno; // anno di nascita
  unsigned int mese; // mese di nascita
  unsigned int giorno;  // giorno di nascita
};

Nota: a differenza del libro, qui useremo solo la prima lettera maiuscola per il nome delle struct, che è una convenzione più usata. Anche tutto maiuscolo va bene comunque. NON va bene invece tutto minuscolo, in quanto il nome della struttura è un tipo, non una variabile, e quindi non può iniziare con una lettera minuscola.

Per utilizzare questa struttura:

int main(void) {
  struct Nominativo prof; // dichiaro una variabile di tipo struct Nominativo
  strncpy(prof.nome, "Claudio Capobianco", 20);
  strncpy(prof.indirizzo, "Via Tal dei Tali", 20);
  prof.anno = 2000;
  prof.mese = 1;
  prof.giorno = 1;

  return 0;
}

Le variabili all'interno di una struct si definiscono anche campi o attributi.

Cose a cui prestare attenzione:

  • deve essere sempre chiaro cosa deve contenere un campo di una struct, mettendo un nome autoesplicativo (es. int anno_nascita) oppure un commento (es. int anno; //anno di nascita); senza questi accorgimenti non sarebbe chiaro cosa deve contenere la variabile (anno di nascita? iscrizione? diploma?)

Stampa dei campi di una struct

Ogni volta che creiamo una struct, è utile scrivere una funzione che ne stampi i valori in modo opportuno. Ad esempio, per la nostra struct nominativo:

void stampa_nominativo(struct NOMINATIVO n) {
  printf("Nome: %s\n", n.nome);
  printf("Indirizzo: %s\n", n.indirizzo);
  printf("Data di nascita: %d/%d/%d\n", n.giorno, n.mese, n.anno);
}

Possiamo implementare la nostra funzione stampa in modo da rendere più leggibili i valori, ad esempio nel nostro caso abbiamo scritto la data di nascita in una sola riga, come si fa convenzionalmente.

Prestate sempre quindi attenzione a stampare i valori in modo corretto:

  • tutte le grandezze devono avere l'unità di misura (metri, secondi, anni, litri, etc.)
  • i valori devono essere stampati nel modo in cui l'utente se li aspetta (ad esempio, non 1.5 ore ma 1h 30m)