ciao a tutti, sto cercando di risolvere la 3funzione:
- una funzione che riceve un nuovo elemento (cognome, nome) e il codice del volo; se il numero di posti disponibili del volo è maggiore di zero, la funzione deve effettuare l'inserimento del cognome e nome nella lista delle prenotazioni o degli acquisti, a secondo della richiesta del cliente (si può passare un parametro formale o chiedere direttamente al cliente se vuole fare una prenotazione o un acquisto). In ogni caso il numero dei posti disponibili deve essere decrementato di uno, dopo aver fatto l'inserimento in una delle 2 liste
ecco il testo della funzione

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FLUSH while(getchar()!='\n')

/*****tipobaseList*******/
#define STR 20
typedef struct{
        char cognome[STR], nome[STR];
}tipobaseList;

int Confronta(tipobaseList a, tipobaseList b){
    if(!strcmp(a.cognome,b.cognome)) 
         return(strcmp(a.nome, b.nome));
    else return(strcmp(a.cognome, b.cognome));     
}

void LeggiStringa(char s[], unsigned int dim){
     unsigned int i=0;
     for(i=0; i<dim-1 && (s[i]=getchar())!='\n';i++)
         s[i]='\0';
     if(i==dim-1) while(getchar()!='\n');    
}

void  LeggiElemento(tipobaseList *x){
     printf("\nInserisci cognome: ");
     LeggiStringa(x->cognome, STR);
     printf("\nInserici nome: ");
     LeggiStringa(x->nome, STR);
}

/********list*************/
#define LISTAVUOTA NULL

typedef struct nodoList{
       tipobaseList info;
       struct nodoList *next;
} *list;

typedef short boolean;
typedef list position;

void MakeNullList(list *l){
     *l=LISTAVUOTA;
}

boolean EmptyList(list l){
        return(l==LISTAVUOTA);
}

boolean  FullList(list l){
       return(0);
}

position End(list l){
        if(l==LISTAVUOTA) return(LISTAVUOTA);
        while(l->next!=LISTAVUOTA)
              l=l->next;
              return(l);
}

position First(list l){
         return(LISTAVUOTA);
}

void InsertList(list *l, position p,tipobaseList x){
     struct nodoList *tmp;
     if(!FullList(*l)){
                   tmp=(struct nodoList *) malloc(sizeof(struct nodoList));
                   tmp->info=x;
                   if(p==LISTAVUOTA){
                                     tmp->next=*l;
                                     *l=tmp;
                   }else{
                         tmp->next=p->next;
                         p->next=tmp;
                   }
     }
}

void DeleteList(list *l, position p){
     struct nodoList *tmp;
     if(p==LISTAVUOTA){
                       tmp=(*l)->next;
                       free(*l);
                       *l=tmp;
     }else {
           tmp=p->next;
           p->next=tmp->next;
           free(tmp);
     }
}

position Next(list l, position p){
         if(p==LISTAVUOTA) return(l);
         else return(p->next);
}

tipobaseList Retrieve(list l, position p){
             if(l==LISTAVUOTA) return(l->info);
             else return(l->next->info);
}

position Locate(list l, tipobaseList x){
         if(!EmptyList(l)){
                if(!Confronta(l->info,x)) return(LISTAVUOTA);
                while(l->next!=LISTAVUOTA){
                       if(!Confronta(l->next->info,x)) return(l);
                       l=l->next;                    
                } return(l);           
         }
}



/*****archivio*******/
typedef struct{
        unsigned int posti_disponibili;
        list posti_acquistati;
        list posti_prenotati;
}archivio;
archivio *archivio_voli;

void AllocaVettore(archivio **x, unsigned int n){
     *x=(archivio *)malloc(n*sizeof(archivio));
}

void InizializzaVettore(archivio *x, unsigned int n){
     unsigned int i=0, s=0;
     for(i=0; i<n; i++){
        printf("Numero posti disponibili del volo <%u> ? ", i);
        scanf("%u", &s);
        FLUSH;
        (x+1)->posti_disponibili=s;
        MakeNullList(&((x+1)->posti_acquistati));
        MakeNullList(&((x+1)->posti_prenotati));
     }
}

/**************3 funzione****************/
void Insord(list *l,tipobaseList x){
     position p,u;
     tipobaseList tmp;
     if(EmptyList(*l))
           InsertList(l,First(*l),x);
     else {
          p=First(*l);
          u=End(*l);
          while(p!=u) {
                      tmp=Retrieve(*l,p);
                      if(Confronta(tmp,x)<0) p=Next(*l,p);
                      else break;
          }
          InsertList(l,p,x);
     }
}


void InserimentoPrenotazione(list *l,tipobaseList a){
     position p;
     if(!EmptyList(*l)) p=Locate(*l,a);
     if(EmptyList(*l) || p==End(*l)){
     Insord(l,a);
     } else printf("\nPasseggiero gia' presente");
}

void InserimentoAcquisto(list *l,tipobaseList a){
     position p;
     if(!EmptyList(*l)) p=Locate(*l,a);
     if(EmptyList(*l) || p==End(*l)){
     Insord(l,a);
     } else printf("\nPasseggiero gia' presente");
}
void Inserisci(archivio *x, tipobaseList a){
     unsigned int v, c;
     printf("Codice volo? ");
     scanf("%u%", &v);
     FLUSH;
     if(x->posti_disponibili>0){
                         printf("1-prenota ");
                         printf("2-acquista ");
                         scanf("%u%", &c);
                         FLUSH;
                         if(c==1) InserimentoPrenotazione(&(x->posti_prenotati), a);
                         if(c==2) InserimentoAcquisto(&(x->posti_acquistati), a);
                         x->posti_disponibili--;
     }else (printf("\nNumero posti disponibili esutito"));
}

main (){
     unsigned int n, scelta;
     tipobaseList persona;
     
      do{
        printf("\n/**********ARCHIVIO VOLI***************/");
        printf("\n1-Alloca Vettore");
        printf("\n2-Numero posti disponibili");
        printf("\n3-Inserimento");
        printf("\n4-Conferma acquisto");
        printf("\n5-Esci");
        printf("\nscelta--------------->");
        scanf("%u", &scelta);
        switch(scelta){
                   case 1: do{
                              printf("\nInserisci il numero di elementi del vettore: ");
                              scanf("%u",&n);
                              FLUSH;
                           }while(n<2); 
                           
                           AllocaVettore(&archivio_voli, n);
                           break;
                   case 2: InizializzaVettore(archivio_voli, n);
                           break;
                   case 3: LeggiElemento(&persona);
                           Inserisci(archivio_voli[...], persona);
                           break;
                   case 4: 
                    
                               
                       
        }
                       
     }while(scelta<4);
     
}
1- con la funzione LeggiElemento non riesco a inserire cognome e nome da tastiera
2- come faccio a passare il codice del volo alla funzione Inserisci???