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;
}
The
ignore()
has no effect when the stream is in fail state, so do theclear()
first.When the stream is in an state of error,
does not do anything. You need to call
cin.clear()
first before callingcin.ignore()
.Also,
cin.ignore()
will ignore just one character. To ignore a line of input, use:Add
to be able to use
std::numeric_limits
.The fixed up block of code will look something like: