1

if (!(cin.good())) cout << "No letters" << 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 回答