Estremamente al volo.
Usa sempre:
codice:
string line;
while (getline(cin,line)) {
   ... etc


}
Non usare mai l'operatore >> con cin per acquisire un input da console. In questo modo non invalidi mai l'input e ti eviti tutti quei cin.clear(), cin.ignore() etc.
Inserisci line in un ostringstream e usa quello per validare l'input.