In realtà la richiesta è volutamente "sbagliata" dal professore. Utilizzare gli array sarebbe molto più facile ma credo che lui voglia vedere un'allocazione di memoria dinamica. Detto ciò il problema era una cavolata, semplicemente non riconosceva i caratteri delle virgolette nei printf.
In compenso sto cercando di convertire il codice di modo che funzioni con caratteri di una data lunghezza. Funziona tutto bene solo che al momento della funzione visualizza_lista stampa solo il primo carattere.
Idee?
questa è la funzione:
void visualizza_lista(struct elemento *p)
{
printf("\nlista: ");
/* ciclo di scansione */
while(p != NULL)
{
printf("%c", p->inf[100]); // visualizza l’informazione
printf(", ");
p = p->pun; // scorre di un elemento
}
printf("\t\t\t\n\n\nFINE LISTA\n\n\n");
}
qui l'intero codice (magari ho sbagliato prima):
#include <stdio.h>
#include <malloc.h>
#include <string.h>
/* Creazione del tipo elemento */
struct elemento
{
char inf[100];
struct elemento *pun;
}
/* prototipi delle funzioni */
;
struct elemento *crea_lista(); //Crea Lista
//prima funzione adibita al compito di
//CREARE la lista con dati in input da tastiera
void visualizza_lista(struct elemento *); //visualizza_lista
//seconda funzione. Restituisce VOID e
//prende in input la lista da stampare
/*main*/
int main()
{
struct elemento *lista; // puntatore della lista
lista = crea_lista(); // crea la lista
visualizza_lista(lista); // stampa la lista
}
/*Definizione delle funzioni*/
struct elemento *crea_lista()
{
struct elemento *p, *punt; //i due puntatori scorrono la lista
int i, n; //i è l'indice del ciclo.
printf("\n\t\t\tSpecificare il numero\n\n\t\t\tdi elementi nella lista:\n\n\n\n\n");
scanf("%d", & n);
if(n==0) //caso lista vuota
{
p = NULL;
} else {
/* creazione primo elemento */
p = (struct elemento *)malloc(sizeof(struct elemento)); //utilizzo di malloc e sizeof per allocazione dinamica memoria
printf("Inserisci il primo valore:");
scanf("%s", & p->inf[100]);
punt = p;
/* creazione elementi successivi */
for(i=2; i<=n; i++)
{
punt->pun = (struct elemento *)malloc(sizeof(struct elemento));
punt = punt->pun;
printf("\nInserisci il %d elemento:", i);
scanf("%s", & punt->inf[100]);
} // chiudo il for
punt->pun = NULL; // marcatore fine lista
} // chiudo l’if-else
return(p);
} // chiudo la funzione
void visualizza_lista(struct elemento *p)
{
printf("\nlista: ");
/* ciclo di scansione */
while(p != NULL)
{
printf("%c", p->inf[100]); // visualizza l’informazione
printf(", ");
p = p->pun; // scorre di un elemento
}
printf("\t\t\t\n\n\nFINE LISTA\n\n\n");
}