I have a simple c++ program that has a menu and allows the user to select an option with a number. There is also a block of code that ensures the input from the user is valid, however, when I for example input a letter ("s"). Instead of showing an error message and then allowing the user to input a valid response, I receive an infinite loop of the same error message. Code:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
const string PROMPT = ">> ";
int options[3] = {1, 2, 3};
int option;
// Display menu
cout << "MENU" << endl
<< "1\tAdult Tickets" << endl
<<"2\tStudent Tickets" << endl
<< "3\t2 Adults, 2 Children Tickets" << endl << endl;
// Getting option from the user and validating it
do {
// Prompt for input and get option from user
cin >> option;
// Displaying appropriate error messages
if (!isdigit(option)){
// Invalid data type
cout << "This is not a valid number!" << endl;
// Not on the options menu
} else if (!(find(options, options + sizeof(options)/ sizeof(options[0]), option))){
cout << "This option is not on the menu!" << endl;
}
} while (!isdigit(option) || !(find(options, options + sizeof(options)/ sizeof(options[0]), option)));
return 0;
}
This is an example of the output when I input "s"
This is not a valid number This is not a valid number! This is not a valid number! This is not a valid number! This is not a valid number! This is not a valid number! This is not a valid number!...
Any help will be highly appreciated and thank you in advance.
For starters the variable
option
shall have the typechar
.In this case you may apply the function
isdigit
to the entered character.Also you are incorrectly using the find algorithm in the if statement.
The loop can look the following way.