I have a game where the user needs to enter x and y coordinates within a certain range, one at a time. Right now my input code is as follows:
do {
printf("\n");
cout << "X: ";
cin >> x;
cout << "Y: ";
cin >> y;
} while (cin.fail());
I’m new to c++ but reading documentation lead me to believe this was an acceptable method for verifying user input. It works perfectly when the input is valid, however when the input is of a different type (for instance entering “a”) it infinitely loops with “X: Y: “. What do I need to do differently to have it wait for user input as if the lines were being read for the first time?
The biggest problem with trying to parse per variable is that when a user makes a mistake, their whole input becomes suspect.
Consider if I skip invalid input and enter: “3e4 40”. I meant “34 40”, but skipping the e might make “3 4” and leave “40” for later or might leave “4 40”.
Consider using getline to read a whole line in and parsing it such as with istringstream just as you are now — any error becomes an error without leaving the inputstream in a weird state.