Struct in C – In questa lezione faremo un esempio di utilizzo di strutture in C molto semplice. Nella lezione precedente abbiamo introdotto le strutture in C, fornendo definizioni di base e concetti fondamentali. Ora, per comprendere meglio come utilizzare le strutture, svilupperemo un esempio pratico:
Creare una semplice struct alunno che contiene il nome, il cognome e il voto. Dopo inserire da 1 a 20 alunni al massimo e permettere di effettuare una ricerca per cognome dell’alunno. Se ci sono più alunni con lo stesso cognome visualizzarli entrambi.
Procedimento esempio d’uso struct in C
Iniziamo definendo una struttura chiamata alunno
, che contiene i campi cognome
, nome
(entrambi di tipo char) e voto
(di tipo int). Questa struttura rappresenta un singolo alunno.
Per evitare inserimenti non validi, utilizzeremo un ciclo do while
per controllare il numero di alunni che l’utente desidera inserire.
Successivamente, utilizzando un ciclo for
, chiederemo all’utente di inserire i dati di ciascun alunno. Dopo aver inserito tutti i dati, l’utente potrà inserire il cognome di un alunno da cercare. Utilizzando la funzione strcmp
, controlliamo se ci sono corrispondenze con il cognome inserito e, se troviamo degli alunni corrispondenti, visualizziamo i risultati. Se nessun cognome corrisponde, viene visualizzato un messaggio appropriato.
È da notare che in questa implementazione non è stato incluso un identificatore univoco per ciascun alunno, il che potrebbe causare problemi nel caso in cui due alunni abbiano lo stesso cognome. Affronteremo questo problema nelle prossime lezioni.
Ecco dunque il listato completo di questo semplicissimo esempio della struct in C.
#include <stdio.h>
#include <string.h>
#define MAX 20
typedef struct {
char cognome[30];
char nome[20];
int voto;
} alunno;
int main() {
alunno a[MAX];
int n, i, j, trovato;
char cerca[20];
do {
printf("Inserisci il numero di alunni: ");
scanf("%d", &n);
} while (n < 1 || n > MAX);
for (i = 0; i < n; i++) {
printf("Inserisci il cognome dell'alunno: ");
scanf("%s", a[i].cognome);
printf("Inserisci il nome dell'alunno: ");
scanf("%s", a[i].nome);
printf("Inserisci il voto: ");
scanf("%d", &a[i].voto);
}
printf("\nInserisci il cognome dell'alunno da cercare: ");
scanf("%s", cerca);
trovato = 0;
for (j = 0; j < n; j++) {
if (strcmp(a[j].cognome, cerca) == 0) {
printf("\nAlunno trovato in posizione %d.\n%s\t%d\n", j + 1, a[j].nome, a[j].voto);
trovato = 1;
}
}
if (!trovato) {
printf("\nAlunno non trovato.\n");
}
return 0;
}
Il programma che abbiamo sviluppato in questo esempio utilizza le strutture in C per gestire i dati degli alunni, consentendo agli utenti di inserire informazioni come nome, cognome e voto di ciascun alunno e successivamente effettuare ricerche in base al cognome.
Ecco una spiegazione dettagliata del codice:
- Definizione della Struttura
alunno
: All’inizio del programma, abbiamo definito una struttura chiamataalunno
, che contiene tre campi:cognome
,nome
evoto
. - Input del Numero di Alunni: Utilizzando un ciclo
do while
, chiediamo all’utente di inserire il numero di alunni che desidera gestire. Questo ciclo assicura che il numero inserito sia compreso tra 1 e il massimo numero di alunni consentito (definito comeMAX
, con valore 20). - Input dei Dati degli Alunni: Attraverso un ciclo
for
, chiediamo all’utente di inserire i dati di ciascun alunno, inclusi cognome, nome e voto. Questi dati vengono memorizzati nelle rispettive variabili della strutturaalunno
. - Ricerca degli Alunni per Cognome: Dopo aver inserito tutti i dati degli alunni, chiediamo all’utente di inserire il cognome di un alunno da cercare. Utilizzando un altro ciclo
for
, scansioniamo tutti gli alunni per trovare corrispondenze con il cognome inserito. Se troviamo un alunno con il cognome corrispondente, visualizziamo i suoi dati (nome e voto). Se nessun alunno corrisponde al cognome inserito, viene visualizzato un messaggio appropriato. - Utilizzo della Funzione
strcmp
: La funzionestrcmp
viene utilizzata per confrontare due stringhe, in questo caso per confrontare il cognome inserito dall’utente con i cognomi degli alunni memorizzati nella struttura. Se il cognome inserito corrisponde a uno degli alunni, la funzione restituisce 0 e viene eseguita l’istruzione all’interno del bloccoif
. - Visualizzazione dei Risultati: Se troviamo un alunno con il cognome corrispondente, visualizziamo i suoi dati (nome e voto). In caso contrario, viene visualizzato un messaggio che informa l’utente che l’alunno non è stato trovato.
In questo modo, il programma consente agli utenti di gestire i dati degli alunni in modo organizzato e di effettuare ricerche rapide in base al cognome.
Conclusioni
In questa lezione abbiamo sviluppato un programma in C che utilizza le strutture per gestire i dati degli alunni. Attraverso questo esempio pratico, abbiamo imparato come definire una struttura per rappresentare gli alunni e come utilizzarla per memorizzare e manipolare le informazioni relative ai loro cognomi, nomi e voti.
Abbiamo inoltre implementato un meccanismo per consentire agli utenti di cercare gli alunni in base al cognome, utilizzando la funzione strcmp
per confrontare i cognomi inseriti con quelli memorizzati nella struttura.
Questo esempio ci ha fornito una comprensione pratica dell’utilizzo delle strutture in C per organizzare e manipolare dati complessi. Nei prossimi passi, potremmo esplorare ulteriori funzionalità e applicazioni delle strutture, nonché approfondire altri concetti di programmazione.
Alcuni link utili
Come fare la somma degli elementi della diagonale principale di una matrice
Sommare elementi cornice esterna
Come sommare i numeri di una matrice
Ricerca elementi in una matrice