Il problema è solo la ricerca adesso... solo che l'ho fatta lunghetta perchè non saprei altri modi per farla... quindi è già ridotto ai minimi termini. Per il compilabile... bè, lo potrei fare, ma sarebbe pure più lungo e tanto non funzionerebbe (nella ricerca), comunque eccolo qua:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DIM 15
#define MAX_CORS 10
#define MAX_TEL 10
#define MESI 12
#define OUT 100



/*struct ind {
       char via[DIM];
       int num;
       };*/
 

struct pers {
       char nome[DIM], cognome[DIM], corso[DIM];
       char ind[31];
       char numTel[MAX_TEL];
       char mese;
       int giorno, anno;
       };

FILE *fp;
struct pers lista;

//Funzioni utilizzate
int menu(void);
int insPer(void);
int cerNom(void);
long cerPer(char *cg, char *nm);
int visEl (void);
void eliPer(long pos);
void canPer (void);

//Main, stampa il menu e lancia la funzione scelta

main(){
     int scelta = 0;
     while (scelta!=OUT){
           switch(scelta){
                          case 0:
                          scelta=menu();
                          if (scelta==0)
                          scelta = OUT;
                          break;
             case 1:
                  insPer();
                  scelta = 0;
                  break;
             case 2:
                  cerNom();
                  scelta = 0;
                  break;
                          }
}
}


// funzione che visualizza menu
int menu(void)
{
    int scelta, vero=1;
    char invio;
    while(vero){
                printf("\n\n\t\t---------MENU---------");
                printf("\n\t1. inserisci persona");
                printf("\t\t2. cerca per nome");
             
                do{
                 printf("\n\n\tscegli opzione: ");
                 scanf("%d", &scelta);    }
                 
                 while(scelta>2 || scelta<0);
                  return(scelta);
                             }
       return (0);
}
                
//1. inserimento persona con salvataggio su file
int insPer (void)
{
    struct pagamenti *p;
    int invio;
    printf("\n\n------INSERIMENTO PERSONA------");
    fp = fopen("lista.txt", "a+");
    printf("\n\n\t\t---------INSERIMENTO---------");
    printf("\n");
    printf("\n\t Nome:  ");
    scanf("%s",&lista.nome);
    fflush(stdin);
    printf("\n\t Cognome:  ");
    scanf("%s",&lista.cognome);
    fflush(stdin);
    printf("\n\t Indirizzo: ");
    scanf("%s",&lista.ind);
    fflush(stdin);
    printf("\n\t Numero telefono: ");
    scanf("%s",&lista.numTel);
    fflush(stdin);
    printf("\n \t Corso: ");
    scanf("%s",&lista.corso);
    fflush(stdin);
    printf("\n\tGiorno ultimo pagamento: ");
    scanf("%d",&lista.giorno);
    printf("\n\tMese ultimo pagamento: ");
    scanf("%s",&lista.mese);
    printf("\n\tAnno ultimo pagamento: ");
    scanf("%d", &lista.anno);
    fwrite(&lista, sizeof(struct pers), 1, fp);
    fclose(fp);
} 
//2. ricerca per nome

int cerNom(void)
{
     char nome[DIM],cognome[DIM],pausa;
     long pos;
     
     printf("\n\t\t\t-------CERCA--------");
     printf("\n\tNome: ");
      scanf("%s",&lista.nome);
     printf("\n\tCognome: ");
      scanf("%s",&lista.cognome);
     scanf("%c", &pausa);
     
     pos==cerPer(cognome, nome);
     if(pos==-1){
                 printf("\nLa persona cercata non è nella scuola");
                 scanf("%c", &pausa);
                 //return(0);
                 }
     else{
    
     printf("\n----------------------------");
     printf("\nCognome: %s",lista.cognome);
     printf("\nNome: %s",lista.nome);
     printf("\nIndirizzo: %s",lista.ind);
     printf("\nNumero di telefono: %s",lista.numTel);
     printf("\nUltimo pagamento il : %d di %s del %d",lista.giorno, lista.mese, lista.anno);
     printf("\n----------------------------");
          scanf("%c",&pausa);
        //  return(0);
          }}
//scansione elenco per cercare nomi
long cerPer(char *cg, char *nm)
{
    int n;
    long pos;
    
    fp= fopen("lista.txt","r");
    
    for( ; ; ){
         n=fread(&lista, sizeof(struct pers), 1,fp);
         if(n==0){
                  fclose(fp);
                  pos=-1;
                  return(pos);
                  }
         else{
              if(strcmp(cg, lista.cognome))
                 if(strcmp(nm, lista.nome))
                               pos=ftell(fp);
                               fclose(fp);
                               return(pos-sizeof(struct pers));
                               }
                               }
                               }