3

この極端な初心者の質問で申し訳ありませんが、

5回の反復でforループを使用しています。ループするたびに、ユーザーに 10 進数を入力するように求めます。私は cin >> aDouble を使用します。任意の数値を入力すると問題なく動作しますが、文字列を入力すると 5 回ループしてから先に進みます。

これが私のコードです。

for(int i = 0; i <= ARRSIZE; i++)
{
    cout << "Please enter a decimal value: ";
    cin >> myDouble;

    if (!cin.fail() )
    {
        myVector.push_back(myDouble);
    }
}

ありがとうございました!!

4

2 に答える 2

4

ストリームが設定値の読み取りに失敗するstd::ios_base::failbitと、このビットはクリアされるまで設定されたままになります。エラー ビットが設定されている間、ストリームは何もしません。つまり、問題に対処している場合cin.fail(): true「文字列」を取り除く必要があります:

if (std::cin.fail()) {
    std::cin.clear();
    std::cin.ignore();                                  // ignore one character or ....
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // rest of line
}
于 2012-10-18T03:56:14.343 に答える
2

cin.clear()エラー状態をクリアするために使用する必要があります。

于 2012-10-18T03:46:15.203 に答える