1

行if(!(cin.good()))cout<<"文字なし"<<endl; 文字を入力するとノンストップで繰り返しますが、他の文字は問題なく動作します。理由がわかりません。

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cstdio>
using namespace std;

int main()
{
    int x;
    cout << "Please enter a number\n";

    srand(time(0));
    int y = rand();

    while (x != y)
    {
        cin >> x;
        if (!(cin.good()))
           cout << "No letters" << endl;
        else if (x < y)
           cout << "Go higher" << endl;
        else if (x > y)
           cout << "Go lower" << endl;
        else
           cout << "You win!!" << endl;
    }
cin.get();
getchar();
return 0;

}
4

2 に答える 2

4

無効な入力が入力バッファーに残っています。すべてを捨てたい場合は、次のようにします。

...
if (!cin.good()) 
{
    cout << "No letters" << endl;
    cin.clear(); // clear error flags
    cin.sync();  // synchronize stream with input source
}
...
于 2012-04-19T00:01:19.960 に答える
1

バッファに残るだけなので、悪い入力を消費する必要があります。

于 2012-04-18T23:59:01.837 に答える