First, you are trying to use char values in a switch that is checking an integer variable. That might technically work, but it is a bad idea. It will probably not do what you want it to.
It seems that what you are trying to do is detect if the user enters a non-number input, and keep asking them to enter something else if they do. What you have is not only an incredibly inefficient approach to doing this, it also just plain won't work. The reason for this is that the error condition generated by a non-number input is already present once cin>> has completed, and has nothing to do with the switch statement or the character values. Even if it did work, it would be vastly more efficient simply to use a default statement.
It IS possible to produce a 'safe' version that will process numbers and non-numbers correctly. The way to do this is to avoid using cin>> on an integer completely. Instead, take the input to a char array and parse that using atoi().
Here is the relevant section of your code (everything from the cin>> to the end of the do while loop) rewritten using the above suggestions:
char* input=(char*)malloc(64);
gets(input);
input[63]='\0';
inst=atoi(input);
do
{
switch(inst)
{
case 1:
instructions();
done = true;
break;
case 2:
cout << "\n\tGood luck!\n\n";
system("pause");
game();
done = true;
break;
default:
cout << endl << "You need to input a number.";
cin.clear();
done = false;
cin >> inst;
continue;
}
}
while(!done);
Note that it is still not perfectly safe. Although it will work for both numbers and non-numbers, it is not safe for inputs larger than 63 characters in length. Since all valid 32-bit integers in base 10 are at most 11 digits in length, this shouldn't be a problem.
It is actually possible to write code which IS safe for inputs of any arbitrary length. However, doing so is quite complicated and probably way outside the bounds of what you are considering doing here.