mmm ho capito grazie mille...se invece adottassi questa soluzione:
allora a parte il resto del programma quello che mi interessa è questocodice: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; }
in pratica prima leggo come carattere e salvo nel buffer e poi attraverso atoi converto la stringa in intero.codice:cin.getline(buffer,20); scelta=atoi(buffer);
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
ho provato a capire come mai e ho scoperto che alla seconda ripetizione senza chidermi niente la scelta diventa = 0...come mai?codice:if (scelta<1 || scelta>5) { cout << endl << "La scelta che hai fatto e' errata ti prego di riprovare"<<endl<<endl; system("pause"); }

Rispondi quotando