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