PROGRAMMIAMO
C++ - Array di struct
Vettori di struct

Come accade con i "normali" tipi non strutturati del C (int, double, char...), anche nel caso delle struct è possibile dichiarare dei vettori.

Un vettore (o array) di struct è un vettore nel quale ogni elemento è una struttura. In pratica il vettore contiene tante struct (fatte allo stesso modo) quanti sono gli elementi del vettore stesso.

Vediamo a questo proposito un esempio riprendendo il programma per i dati anagrafici, riscritto in modo tale da poter gestire i dati di più persone:

#include <cstdlib>
#include <iostream>

using namespace std;

struct dati_anagrafici
{
char nome[100];
char cognome[100];
char sesso;
int anno;
int mese;
int giorno;
char luogo[100];
};

int main(int argc, char *argv[])
{
dati_anagrafici persone[100];
int i,j;

cout<<"Fornisci i dati anagrafici da inserire nell'archivio\n";
cout<<"Per interrompere l'inserimento, premere INVIO dopo la richiesta del NOME\n";

for (i=0;i<100;i++)
{
cout<<"\nDati persona numero "<<i+1<<"\n";
cout<<"Nome: ";
cin.getline(persone[i].nome,100);

if (!strcmp(persone[i].nome, ""))
break;

cout<<"Cognome: ";
cin.getline(persone[i].cognome,100);
cout<<"Sesso (m/f): ";
cin>>persone[i].sesso;
cout<<"Giorno Mese Anno di nascita: ";
cin>>persone[i].giorno;
cin>>persone[i].mese;
cin>>persone[i].anno;

cin.ignore();
cout<<"Luogo di nascita: ";
cin.getline(persone[i].luogo,100);
}

cout<<"Inserire il numero della persona di cui si vogliono visualizzare i dati ";
cout<<"(1-"<<i<<"): ";
cin>>j;
j=j-1;
cout<<"\nRIEPILOGO DATI:\n";
cout<<persone[j].nome<<" "<<persone[j].cognome<<" ";
cout<<"nat";
if (persone[j].sesso=='m')
cout<<"o";
else
cout<<"a";
cout<<" a "<<persone[j].luogo;
cout<<" il "<<persone[j].giorno<<"/"<<persone[j].mese<<"/"<<persone[j].anno<<"\n";

system("PAUSE");
return EXIT_SUCCESS;
}

Questo è un esempio di esecuzione del programma:

Osserviamo la dichiarazione del vettore di struct di tipo dati_anagrafici, con nome parole e con 100 elementi:

dati_anagrafici persone[100];

Per utilizzare il campo di un elemento di un vettore di struct la sintassi è:

nome_vettore[numero_elemento].nome_campo

come ad esempio in:

cin>>persone[i].giorno;
cin>>persone[i].mese;
cin>>persone[i].anno;

Osserviamo infine l'istruzione

if (!strcmp(persone[i].nome, ""))
break;

che serve per terminare il ciclo quando viene fornita una stringa vuota, cioè quando l'utente preme invio senza digitare nulla.

 

link precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it