Ciao a tutti,
Devo fare un esercizio con le liste bidirezionali, in cui inserisco delle parole in testa ma il problema è che quando aggiungo la gestione a menù, eseguo il programma e inserisco una parola, la procedura di inserimento non viene eseguita, e quando provo a visualizzare, mi visualizza gli elementi della lista vuoti.
Questo accade solo quando inserisco la gestione a menù nel programma, se uso il main con richiamo di procedure e basta, funziona tutto.
codice:/* -BIDREZIONALI- Inserimento in testa di una parola Inserimento in coda cancellazoine in coda cancellazione in testa stampa delle parole dalla prima all'ultima e viceversa */ #include <stdio.h> #include <malloc.h> #include <string.h> // DICHIARAZIONE struct elemento { char info [20]; struct elemento *suc;//PUNTA AL PROSSIMO NODO struct elemento *prec;//PUNTA AL PRECEDENTE }; struct elemento *p0; char parola [20], sc; void crealista(struct elemento **p0) { *p0=NULL;//LISTA VUOTA } struct elemento *inserimento_in_testa(struct elemento *p0) { struct elemento *p; printf("inserire parola:\t"); gets(parola); p=(struct elemento*)malloc(sizeof(struct elemento)); strcpy(p->info,parola); if(p0==NULL) { p0=p; p->prec=NULL; p->suc=NULL; } else{ p0->prec=p; p->suc=p0; p->prec=NULL; p0=p; } return p0; } void VisualizzaLista(struct elemento *p0) { if(p0==NULL){printf("lista vuota");} else{ printf("lista -> "); // CICLO FINCHE' NON E' VUOTA while(p0 != NULL) { printf("[%s]", p0->info); // VISUALIZZA L'INFORMAZIONE printf(" -> "); p0 = p0->suc; // SCORRE DI UN ELEMENTO } } printf("NULL\n"); } main()//GESTIONE A MENU { crealista(&p0); do { system("cls"); printf("\t- MENU -\n"); printf("Premi 1 per inserire un parola in testa!\n"); printf("Premi 2 per visualizzare la lista.\n"); printf("Premi S per uscire... \n "); scanf("%c", &sc); if(sc=='2') {VisualizzaLista(p0);system("pause");} if(sc=='1') {p0=inserimento_in_testa(p0);} } while(sc!='s'); }

Rispondi quotando