4

重複の可能性:
このcinの読み取りが詰まっているのはなぜですか?

istream演算子(istream &operator>>...)をオーバーロードしましたが、次の形式のポイントを取ります。

(<x-coordinate>,<y-coordinate>)

これを複数回テストしたいので、次のように書いています。

for (int i = 0; i < 10; i++)  {
    cin >> a;
    if (!cin.fail()) { cout << a << endl; }
    else { cout << "Invalid input!" << endl; cin.clear(); }
}

編集:

私は今、次のコードを持っています:

for (int i = 0; i < 10; i++)  {
    cin >> a;
    if (!cin.fail()) { cout << a << endl; }
    else {
        cout << "Invalid input!" << endl; cin.clear();
        while (!cin.eof()) { cin.ignore(); } cin.ignore();
    }
}

無視はクトゥルフによって提案されました。ただし、問題はcinがまだ「無効な入力です!」を出力することです。上記のコードを実行した後:

(3,3) <-- input
(3,3) <-- output
Invalid output! <-- second output

cinに何が含まれているのかをクリアする方法はありますか?

4

1 に答える 1

2

cin.clear()バッファを空にせず、ストリームのエラーフラグをリセットします。次に、cin.ignoreを呼び出す必要があります

istream&  ignore ( streamsize n = 1, int delim = EOF );

入力シーケンスから文字を抽出し、それらを破棄します。

n個の文字が抽出されて破棄されたとき、または文字delimが見つかったときのいずれか早い方で、抽出は終了します。後者の場合、デリム文字自体も抽出されます。


cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

数値制限

于 2012-10-28T00:54:14.067 に答える