【问题标题】:Restricting user input限制用户输入
【发布时间】:2016-06-26 14:46:01
【问题描述】:

我正在制作一个简单的程序,用户需要输入几个可能的字符。我希望可能的输入只有 i、c、l、v、h、k、f、s、x。我确实意识到我可以这样做:

char a;
bool s(false);    
cin>>a;
do
{
switch(a)
case 'i': ...
case 'c': ...
...
default: cout<<"Invalid input! Try again: "; cin>>a; s=true;
} while(s);

但是,我很确定有一个更优雅的解决方案。我猜会涉及枚举。谁能告诉我,因为我找不到任何关于这个主题的东西。

【问题讨论】:

  • 我是否理解正确,您不喜欢错误的字符也在屏幕上回显,这就是您打印“无效输入”的原因?如果用户输入不会被回显并且您需要自己回显它,但只有输入了一个接受的字符,它会解决您的问题吗?
  • 如果用户只输入一个字符,那么 switch 语句确实是最好的解决方案。我想你可以有很长的'if'语句,例如if (a == 'i' || a == 'c' || etc...) 但这似乎更混乱 IMO。

标签: c++ input enums switch-statement


【解决方案1】:

一个简单的解决方案可能是:

const string allowed{"iclvhkfsx"};
while (  cin.get(a) && allowed.find(a)== string::npos)
   cout << "Incorect input, try again ! ";

代码循环直到输入有效的字符(或达到 eof)。

Online demo

这种解决方案可以通过使用basic_string&lt;T&gt; (demo for integers) 推广到字符以外的其他数据类型。当然,switch 是完全有效的,但我认为当不同的输入通常需要不同的处理时,它的好处会更高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2016-07-21
    • 2013-12-04
    相关资源
    最近更新 更多