PDA

Visualizza la versione completa : [C] Liste inserimento e visualizzazione


faza
27-02-2014, 18:17
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.



/* -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');


}

vbextreme
28-02-2014, 09:13
Usa la gets al posto della scanf. Passagli un buffer relativamente grande e poi controlli solo il primo carattere letto.

faza
28-02-2014, 13:58
Dato che sono nuovo del c, non ho capito cosa hai scritto, aparte il gets.
potresti spiegarti meglio o dirmi le righe di codice che per te sono sbagliate?

vbextreme
28-02-2014, 15:59
scanf("%c", &sc);

cambiala in


char buffer[80];
gets(buffer); // o // fgets(buffer,80,stdout);

if (buffer[0] == '1')
//...
//...
//...
while (buffer[0]); // o // while(buffer[0] != '\n');

Loading