ecco l'intero progetto (divertitevi )

codice:
/*-----------------------------<| H e a d e r |>-----------------------------*/

#include <stdio.h>          // Per le funzioni Input/Output
#include <string.h>         // Per le funzioni gets e strcmp

#define MAXREC 30           // Numero massimo di record
#define MAXCHAR 31          // Lunghezza massima dati record

#define MENU 0              // Opzioni del menu equivalgono-
#define INS 1               // a costanti. Ad ogni costante viene-
#define CAN 2               // assegnata un operazione (case).
#define RIC 3               // Vengono definite nel caso si vogliano-
#define VIS 4               // modificare i valori delle costanti-
#define OUT 100             // assegnate ad ogni operazione.




struct record
{ 
 char nome [MAXCHAR];
 char cognome [MAXCHAR];
 char indirizzo [MAXCHAR];
 int eta; 
 };

// Vettore anagrafico di MAXREC record
struct record rubrica[MAXREC];

// Inizializza anagrafico
int indice = 0;

// Dichiarazione funzioni
int menu(void);                                 // Visualizza il menu
int inserisci(int);                             // Inserisci un record
void ricerca(void);                             // Ricerca un record
struct record *scansione(char *, char *, int);  // Avvia ricerca
void elimina(struct record *);                  // Elimina un record
void cancella(void);                            // Avvia cancellazione
void vedirecord(struct record *);               // Visualizza un record
void vedirubrica(void);                         // Visualizza la rubrica

/*-----------------------------<| S o u r c e |>-----------------------------*/

#include "header.h"         // Include il file header dove sono dichiarate le fx




 // MENU - Visualizza il menu
 int menu(void)
 {
  int scelta;
  char invio;
  printf("\n\n\n\n\n\n\n");
  printf(" ******** RUBRICA ********");
  printf("\n -------------------------");
  printf("\n\n 1. Inserisci un record");
  printf("\n\n 2. Cancella un record");
  printf("\n\n 3. Ricerca un record");  
  printf("\n\n 4. Visualizza la rubrica");
  printf("\n\n 0. Esci");
  printf("\n\n\n -> Scegliere un opzione: ");
  scanf("%d", &scelta);
  scanf("%c", &invio);
  printf("\n");
  
  switch(scelta)
  {
   case 0:
   case 1:
   case 2:
   case 3:
   case 4:
    return(scelta);
   default:
   break;
   }
  }    

  // INSERISCI - Inserisci un record
  int inserisci(int pos)
  {
   char invio;
   if(pos>=MAXREC)
     {printf(" Anagrafe pieno");
      scanf("%c", &invio);
      return(pos);
      }    
  printf("\nINSERIMENTO RECORD");
  printf("\n------------------\n\n");
  
  printf("\nCognome : ");
  gets(rubrica[pos].cognome);
  
  printf("\nNome : ");
  gets(rubrica[pos].nome);
  
  printf("\nIndirizzo : ");
  gets(rubrica[pos].indirizzo);
  
  printf("\nEta' : ");
  scanf("%d", &rubrica[pos].eta);
  scanf("%c", &invio);
  pos++;
  return(pos);
  }  
  
  // CANCELLA - Elimina un record
  void cancella(void)
  {
   char pausa;
   char cognome[MAXCHAR];
   char nome[MAXCHAR];
   int eta;
   struct record *RECORD;
   
   printf("\n\t\tCANCELLA RECORD");
   printf("\n\t\t------\n\n");
   
   printf("\nCognome : ");
   gets(cognome);
   
   printf("\nNome : ");
   gets(nome);
   
   printf("\nEta' : ");
   scanf("%d", &eta);  
   scanf("%c", &pausa);
   
   RECORD = scansione(cognome, nome, eta);
   if(RECORD == NULL)
     {printf("\nRecord non presente nella rubrica");
      scanf("%c", &pausa);
      return;
      }
  
  // VEDIRECORD - Visualizza un record 
  vedirecord(RECORD);
  printf("\nConfermi cancellazione? (S/N) ");
   scanf("%c", &pausa);
   if(pausa=='S' || pausa=='s')
     {elimina(RECORD);                  // Elimina un record
      return;
      }    
   }     

  // ELIMINA - Elimina un record
  void elimina(struct record *p)
  {
   strcpy(p->cognome, "");
   strcpy(p->nome, "");
   strcpy(p->indirizzo, "");
   p->eta = 0;
   }   
  
  // RICERCA - Ricerca record se presente
  void ricerca(void)
  {
   char pausa;
   char cognome[MAXCHAR];
   char nome[MAXCHAR];
   int eta;
   struct record *RECORD;
   
   printf("\n\t\tRICERCA RECORD");
   printf("\n\t\t------\n\n");
   
   printf("\nCognome : ");
   gets(cognome);
   
   printf("\nNome : ");
   gets(nome);
   
   printf("\nEta' : ");
   scanf("%d", &eta);  
   scanf("%c", &pausa);
   
   RECORD = scansione(cognome, nome, eta);
   
   if(RECORD == NULL)                               //Condizione If
     {printf("\nRecord non presente nella rubrica");
      scanf("%c", &pausa);
      return;
      }
   
   vedirecord(RECORD);
   scanf("%c", &pausa);
   }    
   
   // SCANSIONE - Ricerca record con scansione vettoriale
   struct record *scansione(char *COGNOME, char *NOME, int ETA)
   {
    int INDICE;
    for (INDICE=0; INDICE<=indice; INDICE++)
        {if(strcmp(COGNOME, rubrica[INDICE].cognome)==0)
           if(strcmp(COGNOME, rubrica[INDICE].nome)==0)  
           if(ETA == rubrica[INDICE].eta)
         return(&rubrica[INDICE]);
         }     
    return(NULL);
   }   
   
   // VEDIRECORD - Visualizza un record
   void vedirecord(struct record *p)            
   {
    printf("\n\n------------------\n");
    printf("\n\t\tCognome : %s", p->cognome);
    printf("\n\t\tNome : %s", p->nome);
    printf("\n\t\tIndirizzo : %s", p->indirizzo);
    printf("\n\t\tEta' : %d", p->eta);
    printf("\n\n------------------\n");
    }    
   
   // VEDIRUBRICA - Visualizza l'intera rubrica
   void vedirubrica(void)
   {
    int INDICE;
    char pausa;
    struct record *RECORD = &rubrica[0];
    for(INDICE=0; INDICE<indice; INDICE++)
       {vedirecord(RECORD++);
        scanf("%c", pausa);
        }    
    }   

/*-------------------------------<| M a i n |>-------------------------------*/
#include <stdio.h>          // I/O
#include <string.h>         // Per le funzioni gets e strcmp
#include "header.h"         // Include il file header dove sono dichiarate le fx




main()
{
 int scelta = MENU;                             // Dichiara scelta uguale a 0
 while(scelta!=OUT)                             // Quando scelta diverso da 100
 {
  switch(scelta)
  {
      case MENU:                                // Caso 0 (Fine)
      scelta = menu();
      if(scelta == MENU)                        // Se scelta uguale a 0
        {scelta = OUT; }                        // Scelta diventa uguale a 100
      break;
  
      case INS:                                 // Caso 1 (Inserisci)
      indice = inserisci(indice);
      scelta = MENU;                            // Scelta azzerato
      break;
  
      case CAN:                                 // Caso 2 (Cancella)
      cancella();
      scelta = MENU;                            // Scelta azzerato
      break;
      
      case RIC:                                 // Caso 3 (Ricerca)
      ricerca();
      scelta = MENU;                            // Scelta azzerato
      break;
      
      case VIS:                                 // Caso 4 (Visualizza rubrica)
      vedirubrica(); 
      scelta = MENU;                            // Scelta azzerato
      break;
      }                                         // Fine switch
 }                                              // Fine while
}
Originariamente inviato da unit1
e se modifichi una delle due: INDICE e indice. potrebbe essere questo...
naaaa, il c in teoria distingue Maiuscole/Minuscole. Non credo...