2016-09-12 7 views
-3

こんにちは私はC++で非常に単純なwhileループをやっていますが、適切な入力が与えられているにもかかわらず、なぜ私がそれにこだわっているのか理解できません。whileループ中にスタックされた

string itemType = ""; 
     while(!(itemType == "b") || !(itemType == "m") || !(itemType == "d") || !(itemType == "t") || !(itemType == "c")){ 
      cout<<"Enter the item type-b,m,d,t,c:"<<endl; 
      cin>>itemType; 
      cout<<itemType<<endl; 
     } 
     cout<<itemType; 

誰かが私が見ていることを指摘できれば、私は非常に感謝します。 b、m、d、t、cが入力されたときに終了するように促されます。

+0

投稿する[MCVE]をご覧ください。また、行ごとにコードをデバッグするときに行ったすべての観察を提供してください。 –

+2

'||'を '&&'に変更します。論理について考えてみてください。そして '!(x == y)'の代わりに '!='を使ってみてください。 –

+0

あなたの条件は「itemTypeはこれらの文字の少なくとも1つと異なる」です。あなたはそうでないものを考えることができますか? – molbdnilo

答えて

1

あなたの問題はあなたのロジックにあります。あなたのwhileループの条件を見ると、アイテムタイプが "b"でないか "m"でないか "d"でなければループが繰り返されます。つまり、アイテムタイプが "b" "m"ではないので、それは繰り返されます。 ||の代わりに& &を使用します。

0

ループを終了するブール式に欠陥があります。ループを終了させるために、itemTypeは同時にすべての文字でなければなりません。最初の代わりに||文字にしてみて、それを否定:

while(!(itemType == "b" || itemType == "m" || itemType == "d" || itemType == "t" || itemType == "c")

0

この

文字列を試してみてくださいitemTypeに= "";他の回答やコメントは、あなたのロジックが間違って正しく書いたように

while(!(itemType == "b" || itemType == "m" || itemType == "d" || itemType == "t" || itemType == "c")){ 

     cout<<"Enter the item type-b,m,d,t,c:"<<endl; 

     cin>>itemType; 

     cout<<itemType<<endl; 

    } 

    cout<<itemType; 

あなたの条件は常にtrue

1

です。 find()を使用すると、あなたのタスクを簡素化します:

std::string validCharacters("bmdtc"); 
while (std::string::npos == validCharacters.find(itemType )) 
{ 
    ... 
} 

このソリューションは、より一般的で読みやすいです。 std::string::find

+1

またはwhile(!strchr( "bmdtc"、itemType [0])) '。 –

関連する問題