ciao coder si hai ragione! infatti quello che avevo scritto era solo un'inizio, ma rileggendo i tuoi messaggi, mi sono accorto di aver letto male...
cioe' te dici di creare un buffer dove ci faccio prendere una riga di caratteri e poi inserisco il tutto dentro il nodo della lista e poi svuoto il buffer e ricomincio con il prossimo nodo... giusto??
ma come faccio a creare un nodo alla volta??
io invece pensavo di fare in uno di questi due modi:
1) determino una grandezza fissa per ogni nodo e arrivederci... ad esempio 5 caratteri
facendo sempre scrivere all'utente cio' che vuole ma inserisco nel nodo solo i caratteri permessi;
2) chiedo all'utente di quanti elementi deve essere composto la lista e quanti elementi puo' contenere ogni nodo e poi faccio scrivere un carattere alla volta e quando incontra un carattere speciale mi punta al nodo successivo...
allora ricapitoliamo: questa e' la mia struttura
codice:
/* definizione del tipo di dato "booleano" */
typedef enum { falso,
vero } bool_t;
/* definizione di un elemento della lista */
typedef struct elem_lista
{
char *simbolo; /* simbolo dell'argomento */
struct elem_lista *succ_p; /* puntatore all'elemento successivo */
struct elem_lista *prec_p; /* puntatore all'elemento precedente */
} elem_lista_t;
questa e' la mia funzione di inserimento:
codice:
/* definizione della funzione di inserimento di un elemento della lista */
void inserisci_simbolo (char simbolo, /* input: simbolo dell'argomento */
elem_lista_t **testa_p) /* lavoro: punt. all'ind. della testa della lista */
{
/* dichiarazione delle variabili locali alla funzione */
elem_lista_t *nuovo_p, /* lavoro: puntatore al nuovo elemento da inserire in lista */
*corr_p; /* lavoro: puntatore di supporto all'inserimento */
/* viene allocato spazio in memoria per il nuovo elemento */
nuovo_p = (elem_lista_t *)malloc(sizeof(elem_lista_t));
/* viene assegnato il simbolo argomento al nuovo elemento */
nuovo_p->simbolo = simbolo;
/* se la lista è vuota il nuovo elemento viene inserito in testa alla lista */
if (*testa_p == NULL)
{
nuovo_p->succ_p = NULL;
nuovo_p->prec_p = NULL;
*testa_p = nuovo_p;
}
/* altrimenti il nuovo elemento viene inserito in fondo alla lista */
else
{
for (corr_p = *testa_p;
(corr_p->succ_p != NULL);
corr_p = corr_p->succ_p);
corr_p->succ_p = nuovo_p;
nuovo_p->succ_p = NULL;
nuovo_p->prec_p = corr_p;
}
}
ora dovrei fare una funzione per acquisire le stringhe di ogni nodo della lista... una Acquisisci_lista
e qui veramente non so come fare
so soltanto quali controlli dovrei mettere che se vuoi te li scrivo
e poi una funzione che mi stampa tutta la lista