问题
I'm trying to setup an input checking loop so it continuously ask the user for a valid (integer) input, but it seems to get trapped in an infinite loop.
I've searched for solutions and tried to ignore() and clear(), but it still doesn't stop.
Could you please correct me where I'm wrong here?
int num;
cin >> num;
while (cin.fail()) {
  cin.ignore();
  cin.clear();
  cout << "Enter valid number: " << endl;
  cin >> num;
}
    回答1:
When the stream is in an state of error,
  cin.ignore();
does not do anything. You need to call cin.clear() first before calling cin.ignore().
Also, cin.ignore() will ignore just one character. To ignore a line of input, use:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Add
#include <limits>
to be able to use std::numeric_limits.
The fixed up block of code will look something like:
int num;
while ( !(cin >> num) ) {
   cin.clear();
   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
   cout << "Enter valid number: " << endl;
}
    回答2:
The ignore() has no effect when the stream is in fail state, so do the clear() first.
来源:https://stackoverflow.com/questions/38680441/stdcin-loops-even-if-i-call-ignore-and-clear