mmm ho capito grazie mille...se invece adottassi questa soluzione:

codice:
int menu(int &abbonato)
{int scelta;
 char buffer[50];
 char risp;
 do
 {clrscr();

  cout << ;
  cout << "1 -;
  cout << "2 -;
  cout << ;
  cout << ";
  cout << ;

  cin.getline(buffer,20);
  scelta=atoi(buffer);
 
  if (scelta == 1 )
  { clrscr();
    cout << "Benvenuto! E' un cliente abbonato? s/n"<<endl;
    cout << endl <<"[Se sei un nuovo cliente e vuoi sottoscrivere un abbonamento"<<endl;
    cout << "torna al menu principale premendo Q]"<<endl;
    cin >> risp;
    if (risp=='s' || risp == 'S')
    abbonato = 0;
    if (risp =='q' || risp == 'Q')
    return 0; 
  }
   
  if (scelta<1 || scelta>5)
  {
   cout << endl << "La scelta che hai fatto e' errata ti prego di riprovare"<<endl<<endl;
   system("pause");
   
  }
 }
  while (scelta<1 || scelta>5);
  return scelta;
}



//PROGRAMMA PRINCIPALE




int main()
{ int scelta;
  int abbonato;
  int conta = 1;
  int codice=1;
  
  do
 {abbonato = -1;
  scelta = menu(abbonato);
   
   switch(scelta)
   {
    case 1: 
    ;
      }
     else ;
     break;
    case 2:
     findTagliando();
     break; 
    case 3:
    
     break;
    case 4:
     clean();
     break;
    case 5:
     write();
     return 0;
    default: 
     break;
   }
 } 
  while (scelta != 5);   
  system("pause");
  return 0;
}
allora a parte il resto del programma quello che mi interessa è questo

codice:
cin.getline(buffer,20);
scelta=atoi(buffer);
in pratica prima leggo come carattere e salvo nel buffer e poi attraverso atoi converto la stringa in intero.

La cosa sembra funzionare...non capisco pero' come mai dopo la prima volta (in cui funziona) alla seconda ripetizione (infatti è inserita in un ciclo come potete vedere nel main) non mi chiede piu di inserire il numero ma salta direttamente all' if

codice:
 if (scelta<1 || scelta>5)
  {
   cout << endl << "La scelta che hai fatto e' errata ti prego di riprovare"<<endl<<endl;
   system("pause");
   
  }
ho provato a capire come mai e ho scoperto che alla seconda ripetizione senza chidermi niente la scelta diventa = 0...come mai?