I have a suggestion for you that should cause no errors and solve your problem.
Input into a string, you can then check the input.
following is a small code i have typed (not checked) just to give you an idea how i would do this (bear in mind a better alternative may exist but im no c++ pro)
cin>>userIn; //get users input
//this code to check for a character
if(isalpha(userIn))//checks if the first character is a character
//save the character to the var you want to switch or whatever you want to do with it
//check for an integer
size_t n = 0;
n++; //finds the number of chars that represent a decimal number
//extract the numbers
char* cNumber = new char[n+1];//create space for it
copy(userIn.begin(), userIn.begin()+n, cNumber); //copy the number characters out
cNumber[n+1] = NULL; //ensure string is null terminated
int iNumber = atoi(cNumber); //convert to integer
//use the integer
The above does not allow for leading whitespace and may not be perfecrt but it should prevent program crashes and/or give you an idea of how to prevent read fails from cin. Im sure there is a better way to get a number from a string but i dont know what it is my aplogies.