Buongiorno, non riesco a svolgere un esercizio con una struct, ovvero devo creare una lista di elemnti e alla fine eliminare gli elementi che non mi servono dalla lista. In questo caso si tratta di gestire i codici di prenotazioni di una compagnia aerea e di eliminare i clienti tramite il codice di prenotazione. Non rieso ad eliminare i clienti giusti poichè elimina sempre l'ultimo cliente della lista.
Posto il codice in attesa di delucidazioni
int main(int argc, char** argv) {
int n;
cout<<"Inserire il numero di prenotazioni da verificare: ";
cin>>n;
while(n<1){
cout<<"Numero non valido. Reinserisci il numero di prenotazione da verificare: ";
cin>>n;
}
prenotazione vet[n];
input(vet, n);
sort(vet, n);
print(vet, n);
elimina(vet, n);
n=n-1;
//sort(vet, n);
print(vet, n);
return 0;
}
#ifndef NEWFILE_H
#define NEWFILE_H
struct prenotazione{
char identif_volo[30];
char cognome[20];
char nome[20];
int cod_pren;
};
void input(prenotazione v[], int);
void sort(prenotazione v[], int);
void print(prenotazione v[], int);
void elimina(prenotazione v[], int);
#endif
void input(prenotazione v[], int dim){
for(int i=0; i<dim; i++){
cout<<"Inseirire l'identificazione volo: "<<endl;
cin>>v[i].identif_volo;
cin.ignore(100, '\n');
cout<<"Inserire il cognome del passeggero: "<<endl;
cin.getline(v[i].cognome, 20);
cout<<"Inserire il nome del passeggero: "<<endl;
cin.getline(v[i].nome, 20);
cout<<"Inserire il codice di prenotazione: "<<endl;
cin>>v[i].cod_pren;
cout<<endl;
}
}
void sort(prenotazione v[], int dim){
for (int t=0; t<dim; t++)
for (int i=dim-1; i>t; i--)
if (v[i].cod_pren < v[i-1].cod_pren)
swap (v[i], v[i-1]);
}
void print(prenotazione v[], int dim){
char incogn[2], innome[2];
for(int i=0; i<dim; i++){
strncpy(incogn, v[i].cognome, 1);
strncpy(innome, v[i].nome, 1);
cout<<"Iniziali del passeggero: "<<incogn<<"."<<innome<<"."<<endl;
cout<<"Identificazione volo: "<<v[i].identif_volo<<endl;
cout<<"Codice di prenotazione: "<<v[i].cod_pren<<endl;
cout<<endl;
}
}
void elimina(prenotazione v[], int dim){
int x, pos;
bool trovato=false;
cout<<"Inserire il codice di prenotazione da eliminare: "<<endl;
cin>>x;
for(int i=0; i<dim; i++){
if(v[i].cod_pren==x){
trovato=true;
pos=i;
for(i=pos; i<dim-1; i++){
v[i].cod_pren=v[i+1].cod_pren;
}
}
}
}
HO postato tre codice poiche stavo sviluppando il programma in maniera modulare.