Consideriamo adesso un esempio un po' più complesso di uso delle struct:
#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 persona;
cout<<"Fornisci i tuoi dati anagrafici\n";
cout<<"Nome: ";
cin.getline(persona.nome,100);
cout<<"Cognome: ";
cin.getline(persona.cognome,100);
cout<<"Sesso (m/f): ";
cin>>persona.sesso;
cout<<"Anno Mese Giorno di nascita: ";
cin>>persona.anno;
cin>>persona.mese;
cin>>persona.giorno;
cin.ignore();
cout<<"Luogo di nascita: ";
cin.getline(persona.luogo,100);
cout<<"\nRIEPILOGO DATI:\n";
cout<<persona.nome<<" "<<persona.cognome<<" ";
cout<<"nat";
if (persona.sesso=='m')
cout<<"o";
else
cout<<"a";
cout<<" a "<<persona.luogo;
cout<<" il "<<persona.giorno<<"/"<<persona.mese<<"/"<<persona.anno<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
La figura successiva mostra il risultato dell'esecuzione del programma:
Analizziamo ora il programma cominciando dalla definizione del tipo di struttura:
struct dati_anagrafici
{
char nome[100];
char cognome[100];
char sesso;
int anno;
int mese;
int giorno;
char luogo[100];
};
Il tipo si chiama dati_anagrafici e i suoi membri sono costituiti da variabili e da vettori di diversi tipi. L'istruzione seguente serve per dichiarare un oggetto di nome persona di tipo dati_anagrafici:
dati_anagrafici persona;
A questo punto i dati anagrafici della persona vengono acquisiti con una serie di cin e di cin.getline (vedi la spiegazione sull'uso di cin.getline):
cout<<"Fornisci i tuoi dati anagrafici\n";
cout<<"Nome: ";
cin.getline(persona.nome,100);
cout<<"Cognome: ";
cin.getline(persona.cognome,100);
cout<<"Sesso (m/f): ";
cin>>persona.sesso;
cout<<"Anno Mese Giorno di nascita: ";
cin>>persona.anno;
cin>>persona.mese;
cin>>persona.giorno;
cin.ignore();
cout<<"Luogo di nascita: ";
cin.getline(persona.luogo,100);
Si noti che i membri della struct vengono usati esattamente come variabili dello stesso tipo (per esempio appunto le stringhe di char vengono acquisite con l'istruzione cin.getline.
L'istruzione cin.ignore() è utile quando si vuole acquisire una stringa dopo aver acquisito una variabile numerica e serve per eliminare il carattere di andata a capo che altrimenti verrebbe acquisito nella stringa.
Infine nella visualizzazione del riepilogo dati si noti l'if che serve per aggiungere una 'a' oppure una 'o' dopo 'nat' a seconda del sesso ('m' o 'f') della persona:
cout<<"\nRIEPILOGO DATI:\n";
cout<<persona.nome<<" "<<persona.cognome<<" ";
cout<<"nat";
if (persona.sesso=='m')
cout<<"o";
else
cout<<"a";
cout<<" a "<<persona.luogo;
cout<<" il "<<persona.giorno<<"/"<<persona.mese<<"/"<<persona.anno<<"\n";
Sito realizzato in base al template offerto da
http://www.graphixmania.it