salve a tutti sto imparando la programmazione multifile attraverso un codice molto semplice che mi ricerca i dati di una certa persona, il tutto allocato dinamicamente. Sia sulla programmazione multifile che la ricerca all'interno dell'archivio tutto ok finchè alla restituzione del valore di posizione della persona (se presente) non è quello che mi aspettavo: infatti mi restituisce sempre 0; però se notate nel sottoprogramma di ricerca ho fatto una cout dell'indice ed effettivamente l'indice è quello che mi aspetterei; ho provato anche a cambiare le impostazioni del passaggio del parametro ma nessunn effetto ho riscontrato, come mai? grazie in anticipo per chi mi aiuterà
Ecco il codice:
(header file che contiene i prototipi e la struttura salvato come persona.h)
codice:
#ifndef _PERSONA_
#define _PERSONA_
#include <cstdlib>
#include <iostream>
#include <string.h>
using namespace std;
struct persona
{
string nome;
string cognome;
int eta;
};
typedef persona* archivio;
archivio allocazione(archivio,const int);
archivio inserisci(archivio,const int );
bool ricerca(const archivio, const int, const string, const string);
int posizione(int);
void stampa(const archivio,const int);
void deallocazione(archivio);
#endif
(file che contiene il codice del main)
codice:
#include "persona.h"
int main()
{
archivio punt=NULL;
int n,pos;
string nome1,cognome1;
do
{
cout<<"inserire dimensione archivio\n";
cin>>n;
}while(n<=0);
cin.ignore();
punt=allocazione(punt,n);
cout<<".........inserimento dati nell'archivio............\n";
cout<<"inserisci "<<n<<" record nell'archivio\n";
punt=inserisci(punt,n);
cout<<"............................\n";
cout<<"...........ricerca di una persona nell'archivio............\n";
cout<<"inserire nome della persona cercata: " ;
getline(cin,nome1);
cout<<"inserire cognome della persona cercata: ";
getline(cin,cognome1);
if(ricerca(punt,n,nome1,cognome1))
{
pos=posizione(posiz);
cout<<"persona presente nell'archivio in posizione "<<pos<<"\n";
}
else cout<<"persona non trovata\n";
cout<<"............................\n";
cout<<"stampa dell'archivio\n";
stampa(punt,n);
cout<<"............................\n";
deallocazione(punt);
cout<<"............................\n";
system("PAUSE");
return 0;
}
(file che contiene il codice dei vari sottoprogrammi)
codice:
#include "persona.h"
archivio allocazione(archivio p,const int riemp)
{
try
{
p=new persona[riemp];
cout<<"archivio allocato con successo\n";
}
catch(bad_alloc xa)
{
cout<<"allocazione fallita\n";
exit(1);
}
return p;
}
archivio inserisci(archivio p,const int riemp)
{
int i;
for(i=0;i<riemp;i++)
{
cout<<"inserisci nome: ";
getline(cin,p[i].nome);
cout<<"inserisci cognome: ";
getline(cin,p[i].cognome);
cout<<"inserisci eta': ";
cin>>p[i].eta;
cin.ignore();
}
return p;
}
bool ricerca(const archivio p, const int riemp, const string n1, const string c1)
{
int i=0;
bool trovato=false;
while(!trovato && i<riemp)
{
if(p[i].nome==n1 && p[i].cognome==c1)
{
trovato=true;
cout<<i<<endl;
posizione(i);
}
else i++;
}
return trovato;
}
int posizione (int j)
{
return j;
}
void stampa(const archivio p,const int riemp)
{
int i;
for(i=0;i<riemp;i++)
{
cout<<"nome: "<<p[i].nome<<endl;
cout<<"cognnome: "<<p[i].cognome<<endl;
cout<<"eta': "<<p[i].eta<<endl;
}
}
void deallocazione(archivio p)
{
p=NULL;
delete [] p;
cout<<"deallocazione avvenuta con successo\n";
}