salve ho un problemino con le liste
ho implementato due progetti uno per capire come funzionano le liste e un altro un pò piu complicato per vedere se avevo capito il concetto
il primo lavoro (funzionante testato) è il seguente
codice:#include <stdio.h> struct elemento{ int info; struct elemento *next; }; struct elemento *crealista(){ char c; struct elemento *p; printf("Vuoi inserire degli elementi? \n"); scanf("%c" , &c); if(c == 'n'){ p=NULL; } else if(c == 's'){ while(c == 's'){ p=(struct elemento*)malloc(sizeof(struct elemento)); printf(" inserisci elemento : "); scanf("%d" , & p->info); scanf("%c", &c); if( c == 'n' ) p->next=NULL; else p->next=crealista(); } } return (p); } void visualizza(struct elemento *p){ printf( " Lista --> "); while(p!= NULL){ printf("%d", p->info); printf("-->"); p=p->next; } printf(" fine \n "); } main(){ struct elemento *e; e= crealista(); visualizza(e); system("PAUSE"); }
per il secondo lavoro ho utilizzato lo stesso algoritmo cioè quello di aggiungere un elemento ogni volta si preme 's'
codice:#include <stdio.h> struct login{ int giorno; int mese; int anno; }; struct logout{ int giorno; int mese; int anno; }; struct ospite{ char nome[500]; int stanza; struct login checkin; struct logout checkout; struct ospite *next; }; struct ospite *crealista(){ struct ospite *p; char nome[50]; char c; int stanza; printf("premi s per iniziare \n"); scanf("%c", &c); printf("crea ospite \n"); if( c == 'n'){ p=NULL; } else if( c == 's' ){ while(c == 's'){ p=(struct ospite*)malloc(sizeof(struct ospite)); printf(" Nome e cognome : "); scanf("%s", nome); strcpy( p->nome , nome); printf( " numero di stanza : "); scanf("%d",& p->stanza); printf(" data di entrata : \n"); printf("giorno :"); scanf("%d", & p->checkin.giorno); printf("\n mese : "); scanf("%d", & p->checkin.mese); printf("\n anno : "); scanf("%d", & p->checkin.anno); printf(" data del logout ? \n"); printf("giorno :"); scanf("%d", & p->checkout.giorno); printf("\n mese : "); scanf("%d", & p->checkout.mese); printf("\n anno : "); scanf("%d ", &p->checkout.anno); scanf("%c", &c); if(c == 's') p->next=crealista(); if( c== 'n') p->next=NULL; } } return(p); } void visualizza( struct ospite *p){ printf( "Ospite --> "); while( p != NULL ){ printf("%s", p->nome); printf("-->"); printf("%d", p->stanza); printf("-->"); printf("%d",p->checkin.giorno); printf("-->"); printf("%d",p->checkin.mese); printf("-->"); printf("%d", p->checkin.anno); printf("-->"); printf("%d", p->checkout.giorno); printf("-->"); printf("%d", p->checkout.mese); printf("-->"); printf("%d", p->checkout.anno); printf("-->"); p=p->next; } printf("\n\n NULL "); } main(){ struct ospite *o; o=crealista(); visualizza(o); system("PAUSE"); }
qualcuno sa spiegarmi perchè i due programmi si comportano diversamente?

Rispondi quotando
