codice:
	#include<stdio.h>
#include<ctype.h>
#include<string.h>
 
#define DIM 10
#define TRUE 1
#define FALSE 0
#define PATH "laurea"
#define AGE_LIMIT 3
#define PATH_REGALO "regalo"
 
// Creo la struttura per contenere i dati
typedef struct lista_invitati{
        char nome[15];
        char cognome[15];
        char eta[4];
        char sesso[2];
        char tipo_invitato[2];
        int key;
        }invitato;
              
//struttura dati di ogni regalo ricevuto
typedef struct t_regalo {
    char oggetto[30];
    float prezzo;
    int gradimento;
    int key;
    }regalo;
    //controllo sesso
    short int controlla_sesso(char *c)
    {
       int i=0;
       for(i=0; i<=strlen(c); i++)
       c[i]= toupper(c[i]);  
       if((strcmp(c,"M") == 0)  || (strcmp(c,"F")==0))
        return 1;
        
        return 0;
        }
   // controllo età     
   short int controlla_eta(char *c)
   {
      int i=0;
      if(strlen(c)>AGE_LIMIT) // se l'età immessa supera 3 caratteri ritorna 0
      return 0;
      for(i=0;i<=strlen(c)-1;i++) 
      if(!isdigit(c[i]))
      return 0;
      
        return 1; //se supera i controlli precedenti va bene
      }
      // controllo invitato
      short int controlla_invitato(char *c)
    {
       int i=0;
       for(i=0; i<=strlen(c); i++)
       c[i]= toupper(c[i]);  
       if((strcmp(c,"A") == 0)  || (strcmp(c,"P")==0))
        return 1;
        
        return 0;
        }
  //inserisce le informazioni per ogni invitato      
  invitato acquisisci_invitato()
  {
  invitato valore;
  printf("inserisci il nome:\n");
  scanf("%s",valore.nome);
  printf("inserisci il cognome:\n");
  scanf("%s",valore.cognome);
  
  for(;!controlla_eta(valore.eta);){
  printf("inserisci l'eta':\n");
  scanf("%s",valore.eta);
}
  for(;!controlla_sesso(valore.sesso);){
  printf("inserisci il sesso:\n\t (f=femmina,m=maschio)\n");
  scanf("%s",valore.sesso);
} 
  for(;!controlla_invitato(valore.tipo_invitato);){
  printf("inserisci il tipo_invitato:\n\t (a=amici, p=parente)\n");
  scanf("%s",valore.tipo_invitato);
}
  return valore;
  }
  //inserisce i dati del regalo
  regalo acquisisci_regalo()
  {
  regalo v_regalo;
  printf("\t\tInserisci i regali ricevuti\n");
  printf("Inserisci il nome dell'oggetto\n");
  scanf("%s",v_regalo.oggetto);
  printf("inserisci il prezzo dell'oggetto\n");
  scanf("%f",&v_regalo.prezzo);
  printf("inserisci il gradimento da 0 a 10\n\t0 non mi piace affatto\n\t10 si, mi piace molto)\n");
  scanf("%d",&v_regalo.gradimento);
  return v_regalo;
}
// funzione che ci consente di memorizzare i dati
   int memorizza( const void* dato,size_t typo, char* percorsofile){
   FILE *progetto;
   progetto=fopen(percorsofile,"a+b");
   if(fwrite(dato,typo,1, progetto)>0){
   printf ("Dati scritti con successo sul file %s!\n",percorsofile);
   fclose(progetto);
   return 1;
   }
   else{
   printf ("Errore nella scrittura dei dati su file\n");
   fclose(progetto); 
   return -1;
   }
   fclose(progetto);
   return -1;
   }
    
    int lista(){
        FILE *progetto;
        progetto=fopen("laurea","rb");
        while(!(feof(progetto))){
        invitato valore;
        fread(&valore, sizeof(invitato),1, progetto);
        printf("NOME\tCOGNOME\t\tETA\tSESSO\tTIPO\n");
        printf("%s\t%s\t\t%s\t%s\t%s\n",
        valore.nome, valore.cognome, valore.eta, valore.sesso, valore.tipo_invitato);}  
        fclose(progetto);
        return 1;
        }
        
   int lista_regalo(){
         FILE *progetto; 
         progetto=fopen("regalo","r+b");
         while(!(feof(progetto))){
         regalo v_regalo;
         fread(&v_regalo, sizeof(invitato),1, progetto);//leggo una struttura e la memorizzo in ato 
         printf("REGALO\tPREZZO\tGRADIMENTO\n");
         printf("%s\t%f\t%d\n",v_regalo.oggetto, v_regalo.prezzo, v_regalo.gradimento);}
         fclose(progetto);
         return 1;
            }
    //controllo parentesi ok
  int Menu();
  main(){int x=1;do{system("color 4d");x=Menu();}while(x!=0);}// colore
  
  int Menu()
  {
    // if(controlla_sesso("Z")){printf("FUNZIONA\n");system("PAUSE");}else{printf("NON FUNZIONA");system("PAUSE");}
      struct lista_invitati valore;
      struct t_regalo v_regalo;
      int fine=0, indice;
      int j, partecipanti;
  printf ("\n\t\t***MENU' PER LA GESTIONE DELLA FESTA DI LAUREA***\n\n");
  printf ("\t1: Inserire dati invitati\n");
  printf ("\t2: Visualizzare lista invitati\n");
  printf ("\t3: Inserire regali ricevuti\n");
 
  printf("Inserisci la tua scelta:    ");
  scanf("%d",&indice);
  
    while(indice<=0 && indice>=4){        qua nel momento che scrivo un numero diverso da 
    printf("SCELTA SBAGLIATA  \n");             1,2,3 non mi dice scelta sbagliata perche???
    printf("Inserisci ora la tua scelta:    ");
    scanf("%d",&indice);
}
switch(indice) 
{
case(1):{
        int p=0;
        printf("\n\nQuanti invitati vuoi inserire? ");
        scanf ("%d",&partecipanti);
        
        while(p!=partecipanti)
        {
        printf("Inserisci l'invitato n.%d:\n",p++);
        invitato valore = acquisisci_invitato(); 
        printf("\n----->%s\n",valore.nome);
        memorizza(&valore,sizeof(invitato),PATH);
     
   }    return;
       break;
   }           
case(2):
         if(PATH==NULL)
         {                                                 vorrei che mi controllasse il mio file se lo trova vuoto mi 
          printf("\t___Lista invitati vuota___\n");    dice LISTA INVITATI VUOTA altrimenti mi ritorna la
          }                                                                lista, ma questo non succede
         else                                              Credo di averlo fatto sintatticamente giusto..
        {
            lista(); }
       return;
       break;
}
  system("PAUSE");
  return 0;
  }