c++ - 限制用户输入

标签 c++ input enums switch-statement

我正在制作一个简单的程序,用户需要输入一些可能的字符。我希望可能的输入仅为 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);

但是,我很确定有一个更优雅的解决方案。我猜想会涉及到枚举。有谁能好心告诉我吗,因为我完全找不到有关该主题的任何内容。

最佳答案

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

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

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

Online demo

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

关于c++ - 限制用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38039655/

相关文章:

C++ 迭代器到 const_iterator

java - 从文本框中获取以逗号分隔的值并将其存储为数组 JAVA

python - Linux 下的 Python 中未读取输入

python - 如何在Python中的函数range()中传递参数

c++ - 新的类型安全枚举是否定义为从 0 开始?

java - 部分枚举建模

c++ - 将基类构造函数转换为派生类构造函数是什么意思?

c++ - 带有自定义键编译器错误的 unordered_map

c++ - gcc 版本 4 和 5 和 6 之间的区别

Java 枚举音符