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
The ignore()
has no effect when the stream is in fail state, so do the clear()
first.
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;
}