2016-06-26 20 views
2

私はユーザーがいくつかの可能な文字を入力する必要がある簡単なプログラムを作っています。可能な入力は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); 

しかし、私はもっと優雅な解決策があると確信しています。私は列挙が関係していると推測しています。誰かが私にそれを伝えるほど親切であろうか、私はその件に関して何かを絶対に見つけることができなかっただろうか?

+0

あなたが気に入らないのは、不適切な文字も画面に表示され、「入力が無効です」と表示されていることです。ユーザーの入力がエコーされず、それを自分でエコーする必要がありますが、受け入れられた文字が入力された場合にのみ、問題は解決しますか? – mvidelgauz

+0

ユーザーが1文字だけを入力している場合は、switch文が実際にはこれに対する最良の解決策です。私はあなたが長い "if"文を持つことができると思います。 if(a == 'i' || a == 'c' || etc ...)しかし、それはちょっと難しいIMOのようです。 – Fibbles

答えて

3

簡単な解決策は、かもしれない:有効な文字が入力され(またはEOFに到達する)まで

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

コードがループ。

Online demo

このような溶液はbasic_string<T>demo for integers)を使用して、文字以外のデータ型に一般化することができます。もちろん、switchは完全に有効ですが、異なる入力が最も頻繁に異なる処理を必要とするたびに、その利点は高くなると思います。

関連する問題