Aw, you're no fun. I was going to roll out the clever scanf scanset solution:
Code:
#include <stdio.h>
void discard(FILE *in);
int main(void)
{
char option;
printf("1) One\n2) Two\n3) Three\n4) Four\n> ");
fflush(stdout);
while (scanf("%[1234]", &option) != 1) {
fprintf(stderr, "Invalid option, try again\n> ");
clearerr(stdin);
discard(stdin);
}
return 0;
}
void discard(FILE *in)
{
int ch;
while ((ch = fgetc(in)) != EOF && ch != '\n')
;
}
But here's a potential C++ solution as well, since this thread will probably be moved:
Code:
#include <iostream>
using namespace std;
int main()
{
int option;
cout<<"1) One\n2) Two\n3) Three\n4) Four\n> ";
while (!(cin>> option) || option < 1 || option > 4) {
cerr<<"Invalid option, try again\n> ";
cin.clear();
cin.ignore(cin.rdbuf()->in_avail(), '\n');
}
}