我正在介绍C++类,我想知道一种更好的检查输入是否是所需类型的方法.
这是一个很好的方法吗?我来自PHP/PERL背景,这使我非常担心使用while循环.
char type;
while (true) {
cout << "Were you admitted? [y/n]" << endl;
cin >> type;
if ((type == 'y') || (type == 'n')) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一种安全的方式吗?或者我打开自己的伤害世界,我怀疑?什么是更好的方法,以确保我在继续之前得到我想要的输入?
McA*_*den 25
就我个人而言:
do
{
cout << "Were you admitted? [y/n]" << endl;
cin >> type;
}
while( !cin.fail() && type!='y' && type!='n' );
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会将提示作为一个单独的函数,这使得它将提示输出和读取响应作为逻辑表达式放入while循环中.
测试读取是否成功对于代码的正确运行至关重要.
我也更喜欢一次使用std::getline
一行,因为它有助于减少读取半读取行的其余部分所导致的错误,这是部分读取早期用户响应的结果.
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)