Safely prompt for yes/no with cin
Personally I'd go with:
do
{
cout << "Were you admitted? [y/n]" << endl;
cin >> type;
}
while( !cin.fail() && type!='y' && type!='n' );
Personally I'd make the prompt a separate function, this makes it putting the prompt output and reading a response a logical expression to put in a while loop.
Testing whether the read was successful is critical to the correct functioning of the code.
I'd also prefer to use std::getline
to get a line at a time as it helps reduce errors caused by reading the rest of a half read line that was the result of a partial read to earlier user responses.
bool PromptForChar( const char* prompt, char& readch )
{
std::string tmp;
std::cout << prompt << std::endl;
if (std::getline(std::cin, tmp))
{
// Only accept single character input
if (tmp.length() == 1)
{
readch = tmp[0];
}
else
{
// For most input, char zero is an appropriate sentinel
readch = '\0';
}
return true;
}
return false;
}
void f()
{
char type = '\0';
while( PromptForChar( "Were you admitted? [y/n]", type ) )
{
if (type == 'y' || type == 'n')
{
// Process response
break;
}
}
}