Grazie!
Ho provato a fare cosi:
Codice PHP:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
//creazione struttura per contenere le manifestazioni
typedef struct {
char nome[50];
char tipo[200];
char ora[MAX];
char minuto[MAX];
char durata[MAX];
} manifestazione;
//creazione struttura per la lista
struct elemento {
manifestazione inf;
struct elemento *pun;
};
//prototipi funzioni
void VisualizzaManifestazione(struct elemento *p);
struct elemento *AggiungiManifestazione(struct elemento *p);
int Ordina(const void *p1, const void *p2);
void pausa();
//main
main(void)
{
//variabile scelta
int scelta;
struct elemento *lista = NULL;
manifestazione *man;
//ciclo infinito per il menu
for( ; ; ) {
printf("MANIFESTAZIONI\n");
printf(" 1 Visualizza Manifestazione\n");
printf(" 2 Aggiungi Manifestazione\n");
printf(" 3 Ordina\n");
printf(" 0 Esci\n");
printf("La tua scelta >> ");
scanf("%i", &scelta);
scelta = (int)scelta; //cast
if(scelta == 0)
{
printf("Arrivederci");
break;
}
else if(scelta == 1)
{
VisualizzaManifestazione(lista);
}
else if(scelta == 2)
{
lista = AggiungiManifestazione(lista);
}
else if(scelta == 3)
{
qsort(man, sizeof(manifestazione) ,sizeof(manifestazione), Ordina);
}
}//chiusura ciclo for
}//chiusura main
/*
Visualizza Manifestazioni
*/
void VisualizzaManifestazione(struct elemento *p)
{
if(p == NULL)
{
printf("Non ci sono Manifestazioni");
pausa();
} else {
printf("Nome > %s\n", p->inf.nome);
printf("Tipo > %s\n", p->inf.tipo);
printf("Ora > %s\n", p->inf.ora);
printf("Minuto > %s\n", p->inf.minuto);
printf("Durata > %s\n", p->inf.durata);
pausa();
}
while(p != NULL)//stampiamo tutte le altre manifestazioni
{
printf("Nome > %s\n", p->inf.nome);
printf("Tipo > %s\n", p->inf.tipo);
printf("Ora > %s\n", p->inf.ora);
printf("Minuto > %s\n", p->inf.minuto);
printf("Durata > %s\n", p->inf.durata);
pausa();
p = p->pun; //legge l'elemento successivo
}
return;
}
/*
Aggiungi Manifestazione
*/
struct elemento *AggiungiManifestazione(struct elemento *p)
{
printf("Aggiungi Manifestazione\n");
//dichiariamo le variabili
char nome[50];
char tipo[200];
char ora[MAX];
char minuto[MAX];
char durata[MAX];
manifestazione daInserire;
struct elemento *punt;
//popoliamo le variabili
printf("Nome > ");
scanf("%s", nome);
strcpy(daInserire.nome, nome);
printf("Tipo > ");
scanf("%s", tipo);
strcpy(daInserire.tipo, tipo);
printf("Ora > ");
scanf("%s", ora);
strcpy(daInserire.ora, ora);
printf("Minuti > ");
scanf("%s", minuto);
strcpy(daInserire.minuto, minuto);
printf("Durata > ");
scanf("%s", durata);
strcpy(daInserire.durata, durata);
if(p != NULL)
{
//creazione elementi successivi
//allochiamo la memoria necessaria
punt = (struct elemento *)malloc(sizeof(struct elemento));
//metto daInserire nell'informazione del puntatore
punt->inf = daInserire;
//metto il puntatore in testa alla lista
punt->pun = p;
} else {
//creazione primo elemento
//allochiamo la memoria necessaria
p = (struct elemento *)malloc(sizeof(struct elemento));
//metto da inserire nell'informazione del puntatore
p->inf = daInserire;
//metto il puntatore in testa alla lista
p->pun = NULL;
//assegno p a punt
punt = p;
}
return(punt);
}
/*
ordina le manifestazioni in base all'ora e ai minuti
*/
int Ordina(const void *p1, const void *p2)
{
manifestazione* s1 = (manifestazione*)p1;
manifestazione* s2 = (manifestazione*)p2;
if(s1->ora < s2->ora)
return -1;
else return 1;
}
//funzione pausa
void pausa()
{
char invio;
printf("premere Invio per continuare");
invio = getchar();
return;
}
Il programma funziona!