ciao a tutti per fare un'esercizio di programmazione per l'esame di informatica 2 ho provato a fare una specie di anagrafe con menù.. il compilatore non mi da errori però quando vado ad eseguire il programma, mi fa immettere i dati degli utenti ma quando eseguo la ricerca e/o cancellazione di un utente, mi dice sempre "non presente in anagrafe".. potete dare uno sguardo al codice e dirmi dove sbaglio?!

grazie in anticipo

codice:
//Capitolo 14 - Esercizio 3

// Scrivere un programma che offra tramite menu le funzioni di inserimento,
// ricerca e cancellazione di un archivio studenti

//GESTIONE ANAGRAFICA

#include <stdio.h>
#include <string.h>

#define MAXELE 	30
#define DIM 		31
#define MENU 		0
#define INS			1
#define CAN		2
#define RIC			3
#define VIS			4
#define OUT		100

//Semplice struttura che modella una persona
struct dat { 
	int giorno;
	int mese;
	int anno;
};
typedef struct dat Data;
struct student {
	char cogStud[80];
	char nomStud[80];
	char indStud[80];
	int eta;
	Data datNasc;
};

//Vettore persone
struct student anag[MAXELE];

//Numero elementi allocati nel vettore anag
int index = 0;

//funzioni esterne al main
int menPer(void);
int insPer(int);
struct student * cerPer(char *, char *, int);
void eliPer(struct student *);
void canPer(void);
void ricPer(void);
void visPer(struct student *);
void visAnagrafe(void);

//Presenta il menu' e lancia la funzione scelta
int main(void)
{
	int scelta = MENU;
	while (scelta!=OUT)
	{
		switch (scelta)
		{
			case MENU:
				scelta = menPer();
				if (scelta == MENU)
					scelta = OUT;
				break;
			case INS:
				index = insPer(index);
				scelta = MENU;
				break;
			case CAN:
				canPer();
				scelta = MENU;
				break;
			case RIC:
				ricPer();
				scelta = MENU;
				break;
			case VIS:
				visAnagrafe();
				scelta = MENU;
				break;
		}
	}
}

//Menu'
int menPer(void)
{
	int scelta;
	char invio;
	int vero = 1;
	while (vero)
	{
		printf("\n\n\n\n\n\n\n\n\n");
		printf("\t\t\t ANAGRAFE");
		printf("\n\n\n\t\t\t 1. Immissione Persona");
		printf("\n\n\n\t\t\t 2. Cancellazione Persona");
		printf("\n\n\n\t\t\t 3. Ricerca Persona");
		printf("\n\n\n\t\t\t 4. Visualizzazione Anagrafe");
		printf("\n\n\n\t\t\t 0. Fine");
		printf("\n\n\n\t\t\t\t Scegliere un'opzione: ");
		scanf("%d", &scelta);
		scanf("%c", &invio);
		printf("\n\n\n\n\n\n\n\n\n");

		switch (scelta)
		{
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:
				return (scelta);
				break;
			default:
				break;
		}
	}
	return (0);
}

//Inserisce persona nell'anagrafe
int insPer(int pos)
{
	char invio;
	if (pos >= MAXELE)
	{
		printf(" Non si possono inserire altri nomi");
		scanf("%c", &invio);
		return (pos);
	}
	printf("\n\t\tINSERIMENTO PERSONA");
	printf("\n\t\t-------------------------------------------");
	printf("\nCognome : ");
	gets(anag[pos].cogStud);
	printf("\nNome : ");
	gets(anag[pos].nomStud);
	printf("\nIndirizzo : ");
	gets(anag[pos].indStud);
	printf("\nEta' : ");
	scanf("%d", &anag[pos].eta);
	scanf("%c", &invio);
	pos++;
	return(pos);
}

//Cancella persona dall'anagrafe, se presente
void canPer(void)
{
	char pausa;
	char cognome[DIM], nome[DIM];
	int eta;
	struct student *ps;

	printf("\n\t\tCANCELLA PERSONA");
	printf("\n\t\t-------------------------------------");
	printf("\nCognome : ");
	gets(cognome);
	printf("\nNome : ");
	gets(nome);
	printf("Eta' : ");
	scanf("%d", &eta);
	scanf("%c", &pausa);

	//Invoca ricerca persona
	ps = cerPer(cognome, nome, eta);
	if (ps == NULL)
	{
		printf("\nPersona non presente in anagrafe");
		scanf("%c", &pausa);
		return;
	}
	//Invoca visualizza persona
	visPer(ps);
	printf("\nConfermi cancellazione? (S/N) : ");
	scanf("%c", &pausa);
	if (pausa == 'S' || pausa == 's')
	{
		eliPer(ps);
		return;
	}
}

//Elimina persona dall'anagrafe
void eliPer(struct student *p)
{
	strcpy(p->cogStud, "");
	strcpy(p->nomStud, "");
	strcpy(p->indStud, "");
	p->eta = 0;
}

//Ricerca persona se presente nell'anagrafe
void ricPer(void)
{
	char pausa;
	char cognome[DIM], nome[DIM];
	int eta;
	struct student *ps;

	printf("\n\t\tRICERCA PERSONA");
	printf("\n\t\t-------------------------------------");
	printf("\nCognome : ");
	gets(cognome);
	printf("\nNome : ");
	gets(nome);
	printf("Eta' : ");
	scanf("%d", &eta);
	scanf("%c", &pausa);

	//Invoca la funzione di ricerca sequenziale
	ps = cerPer(cognome, nome, eta);
	if (ps == NULL)
	{
		printf("\nPersona non presente in anagrafe");
		scanf("%c", &pausa);
		return;
	}
	visPer(ps);
	scanf("%c", &pausa);
}

//Scansione sequenziale del vettore anag alla ricerca di una
//persona che abbia determinati cognome, nome ed eta'
struct student *cerPer(char *cg, char *nm, int et)
{
	int i;
	for(i=0; i<=index; i++)
	{
		if (strcmp(cg, anag[i].cogStud) == 0)
			if (strcmp(nm, anag[i].nomStud) == 0)
				if ((et == anag[i].eta) == 0)
						return (&anag[i]);
	}
	return(NULL);
}

//Visualizza persona
void visPer(struct student *p)
{
	printf("\n\n-------------------------------------------------");
	printf("\n\t\tCognome : %s", p->cogStud);
	printf("\n\t\tNome : %s", p->nomStud);
	printf("\n\t\tIndirizzo : %s", p->indStud);
	printf("\n\t\tEta' : %d", p->eta);
	printf("\n\n-------------------------------------------------");
}

//Visualizza l'anagrafe completa
void visAnagrafe(void)
{
	int i;
	char pausa;
	struct student *ps = &anag[0];
	for (i=0; i<index; i++)
	{
		visPer(ps++);
		scanf("%c", &pausa);
	}
}