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;
}