>>44
ありがとうございます。自分でも調べてみたのですが、

int a;
cin >> a;
入力データを使って処理する
cin.clear();
cin.ignore(numeric_limits<int>::max(),'\n');

とするとcinが元の状態に戻りました。
ここで、clear()はgoodbitを立てるものだとして、
ignore()は指定文字数分か指定した文字(上記だと'\n')が出るまで
入力値をバッファから消す、という処理ですよね。

cinの入力ってこう書かないとだめなのでしょうか?
(結構面倒かも、と思った)