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');
}