2016-10-30 6 views
0

ユーザの入力を検証し、文字の範囲内にあることを確認しようとしています(3つのオプションa、b、c)。私はそれを動作させることができたが、私はなぜそれほど理解していない。 !char.TryParse(Console.Readline(), out theCharacter は何をユーザーがchar型に入り、|| !the.Character.Equals('a')は、単に文が真でない場合、ユーザは意志(charがAに等しくない)ことを検証することをことを検証するwhile char.TryParse character validation

char theCharacter;    
Console.WriteLine("{0}", "Enter a,b or c"); 

while (!char.TryParse(Console.ReadLine(), out theCharacter) || !theCharacter.Equals('a')) 
{ 
    if (theCharacter.Equals('b')) 
    { 
     break; 
    } 
    else if (theCharacter.Equals('c')) 
    { 
     break; 
    } 
    else 
    { 
     Console.WriteLine("Please chose a valid character(a, b or c)."); 
    } 
} 

私は理解して(あるいはそう信じています) a、b、cのいずれかを入力することを約束する。

しかし、私は次の操作を実行した場合:

while (!char.TryParse(Console.ReadLine(), out theCharacter) || !theCharacter.Equals('a') || !theCharacter.Equals('b') || !theCharacter.Equals('c')) 

どんなに私の入力が何であるかを、ユーザは、whileループでスタックしていない と私がしなければされています

while (!char.TryParse(Console.ReadLine(), out theCharacter) && (!theCharacter.Equals('a') == true || !theCharacter.Equals('b') == true || !theCharacter.Equals('c')== true)) 

何があって文字Iを入力すると、theCharacterとして受け入れられます。

誰かが次の2つの文がうまくいかない理由を説明することができますか?私の宿題のために

theCharactercharタイプ、およびカント使用array sであり、または他の私はstringで行って、物事が容易になっただろう。

答えて

1

文字が "a"でない場合にのみループに入り、文字が "b"や "c"でない場合にループを継続したため、初期条件が機能しました。文字が "a"、 "b"または "c"でない場合にのみループが継続されます。

しかし、3番目の "a"、 "b"、 "c"とは異なるすべての文字に対してループを繰り返すため、2番目の条件には問題があります(たとえば、 "a"は"b"これは条件に答えます。 "m"は "a"とは異なりますので、条件に答えます)。世界のすべての人物がこの条件に答えます。あなたがチェックするために何を意味するのか が文字ではないということである「a」および「b」ではありませんので、同様に、「C」ではありません。

!theCharacter.Equals('a') && !theCharacter.Equals('b') && !theCharacter.Equals('c') 

とフルコード:

char theCharacter; 
    while (!char.TryParse(Console.ReadLine(), out theCharacter) || 
      (!theCharacter.Equals('a') && !theCharacter.Equals('b') && !theCharacter.Equals('c'))) { 

    } 
あなたの答えに感謝します。
+0

私は私の元の要求を変更した、私は配列を使用することはできません。また、私の質問のために、私が後にしたことがうまくいかず、なぜ私が何をしたのかを理解したいと思います。 – glls

+0

あなたの質問に正確に答えるためにそれを編集し、コードを少し簡略化しました。それが助けて欲しいです:) – Royar

+0

それは確かにします。ありがとう! – glls