Allora, il codice è semplice. Come scritto nella traccia, chiede di mettere in un array di struct i valori all'interno del file.
Come vedrete, ho dovuto aprire e chiudere il file 2 volte, solo perchè ho allocato dinamicamente l'array nel main.
Se lo avessi fatto nella funzione il tutto sarebbe stato più efficiente.
Ritornando alla mia domanda, come posso allocare dinamicamente l'array e poi chiamarlo in un altra funzione?
/*
È dato un file di testo PEOPLE.TXT che contiene i dati di una serie di persone (non più di 20), una persona per riga.
Più precisamente, ogni riga contiene nell'ordine:
il cognome (non più di 20 caratteri, senza spazi intermedi)
uno o più spazi
il nome (non più di 20 caratteri, senza spazi intermedi)
uno o più spazi
la data di nascita nel formato gg/mm/aaaa
uno e un solo spazio
un carattere ('M' o 'F') che indica il sesso.
Si chiede di scrivere un programma C che, dopo aver definito una struttura persona nel modo appropriato a quanto sopra:
contenga una funzione lettura() che, dato il nome del file (ed eventualmente altri parametri se opportuno),
legga i dati delle persone dal file e li metta in un array di persona di nome elenco;
*/
#include<iostream>
#include<fstream>
#include<string.h>
#include "nomi.h"
using namespace std;
void LeggiFile(int &cont);
void ImmettiDati(Persona *individuo, int &cont);
struct Data{
int giorno;
int mese;
int anno;
};
struct Persona {
string cognome;
string nome;
Data data_nascita;
char sesso;
};
int main()
{
int cont=0;
Persona *individuo=NULL;
LeggiFile(cont);
individuo=new Persona[cont];
ImmettiDati(individuo, cont);
}
//M: Lettura file per contare il numero di righe
void LeggiFile(int &cont){
string riga;
ifstream Leggi("People.txt");
if(!Leggi){
cout<<"errore";
exit(1);
}else
while(!Leggi.eof())
{
getline(Leggi, riga);
cont++;
}
Leggi.seekg(0);
Leggi.close();
}
//M: Immssione degli elementi del file nell'array allocato dinamicamente nel main
void ImmettiDati(Persona *individuo, int &cont)
{
int i=0;
ifstream LeggiF("People.txt");
if(!LeggiF){
cout<<"errore";
exit(2);
}else
while(!LeggiF.eof())
{
//cout<<"lol";
LeggiF>>individuo.cognome;
LeggiF>>individuo.nome;
LeggiF>>individuo.data_nascita.giorno;
LeggiF>>individuo.data_nascita.mese;
LeggiF>>individuo.data_nascita.anno;
LeggiF>>individuo.sesso;
i++;
}
LeggiF.close();
for(i=0;i<cont;i++){
cout<<individuo.cognome<<" ";
cout<<individuo.nome<<" ";
cout<<individuo.data_nascita.giorno<<"/";
cout<<individuo.data_nascita.mese<<"/";
cout<<individuo[i].data_nascita.anno<<"/"<<" ";
cout<<individuo[i].sesso<<endl;
}
}