0

私の問題はcin、エラーが発生した場合に のストリームをリセットできないことです。たとえば、int が必要なときに文字列を入力し、次にストリームをクリアすると、次回にループするときにcin.fail()-if.

何か助けはありますか?

私のコードは次のとおりです。

int main()
{
    int i;
    while(cin>>i,!cin.eof())
    {
        if(cin.fail())
        {
            cin.clear();
            continue;
        }
        cout<<i<<endl;
    }
    system("pause");
}

ところで:情報については、Visual Studio を IDE として使用しています。

4

2 に答える 2

5

抽出していないので、文字列はまだそこにあります。したがって、次の読み取りも失敗します。cin.ignore不正な文字をスキップするには、を使用する必要があります。

于 2012-10-02T14:31:41.517 に答える
1

次のようなものを使用します。

int i;
while(cin>>i,!cin.eof())
{
    if(cin.fail())
    {
        cin.clear();
        string dummy;
        cin >> dummy;
        continue;
    }
    cout<<i<<endl;
}

これにより、次の単語がスキップされます。のようなものを入力derp10 20すると、20 になります。

于 2012-10-02T14:34:43.847 に答える