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?