Una volta che cin è in errore ci rimane finché il suo stato interno non viene esplicitamente risettato a "good".
Inoltre può essere necessario ripulirlo.
codice:if (cin.fail()) { cout << "Bad Input" << endl; cin.clear() cin.ignore(INT_MAX,'\n'); return 1; }