2012-12-22 31 views
5

我是新來的C#我已經開始學習它拓寬編程語言對我的處置,但我遇到了一個小問題,我沒有既不Ç還是Java都沒有遇到。試圖比較字符在C#

我想從鍵盤獲得用戶響應,然後將其與可能的情況進行比較,如果沒有這些情況匹配,那麼我希望用戶必須重複該過程直到他輸入了正確的值。

String input = Console.ReadLine(); 
     while ((input[0] != 'N') || (input[0] != 'Y')) 
     { 
      input = Console.ReadLine(); 

     } 
     if (input[0] == 'N') 
     { 
      Console.WriteLine("NO"); 
      Console.ReadKey(); 
     } 
     else if (input[0] == 'Y') 
     { 
      Console.WriteLine("YES"); 
      Console.ReadKey(); 
     } 

這是迄今爲止我沒有試過的最有效方式,我也試着做一個do while循環和許多其他變體。

我遇到的問題是,當沒有激活​​while循環時,所有的工作都很好,但是當我添加它時,即使輸入是N或Y並且永遠不會離開循環,它總是進入循環很明顯,這是錯誤的。

請,如果有人可以給我一些見解,爲什麼這正在發生或如果有人可以提出這樣做​​,將不勝感激的更好的方法。謝謝。

卡里姆

+2

更換||與&& –

+0

試開關,打破.. – sajanyamaha

+0

我認爲你應該做的是這樣的:(!(輸入[0] == 'Y' ||輸入[0] == 'N'))雖然 –

回答

6

眼下,在你的while語句的條件總是爲真。要測試一個很好的方法就是把這裏while循環正在測試一個斷點,然後在「添加表」到有條件的每個部分。

變化

while ((input[0] != 'N') || (input[0] != 'Y')) 

while ((input[0] != 'N') && (input[0] != 'Y')) 
+0

非常感謝你,我覺得這樣的傻瓜大聲笑。 – JahKnows

0

嗯,你的條件的問題。你的兩個條件是Ored,意思是如果其中一個條件成立,那麼循環將執行。所以,你第一或條件,而不是像!(條件1 ||條件2)結果如下

 String input = Console.ReadLine(); 

     while (!((input[0] != 'N') || (input[0] != 'Y'))) 
     { 
      input = Console.ReadLine(); 
     } 

     if (input[0] == 'N') 
     { 
      Console.WriteLine("NO"); 
      Console.ReadKey(); 
     } 

     else if (input[0] == 'Y') 
     { 
      Console.WriteLine("YES"); 
      Console.ReadKey(); 
     } 
1

的問題是狀態檢查。

while ((input[0] != 'N') || (input[0] != 'Y')) 

假設'N'進入。 現在條件(input[0] != 'Y')成爲,它應該打破while循環,但由於||與(input[0] != 'N')這仍然真正,最終的結果病情出來是真正,因此它永遠不會爆發循環。

更換||& &

1

試試這個: -

String input = Console.ReadLine(); 
     while ((input[0] != 'N') && (input[0] != 'Y')) 
     { 
      input = Console.ReadLine(); 

     } 
     if (input[0] == 'N') 
     { 
      Console.WriteLine("NO"); 
      Console.ReadKey(); 
     } 
     else if (input[0] == 'Y') 
     { 
      Console.WriteLine("YES"); 
      Console.ReadKey(); 
     } 
3

大家都已經指出的那樣,你正在使用||,你應該使用&&

除此之外,您還嘗試訪問可能爲空的字符串的第一個字符。如果用戶剛剛輸入'Enter',這將導致異常。

既然你問了一個更好的方法,這裏有一個替代方案,它使用Console.ReadKey而不是Console.ReadLine,因爲你似乎只對獲得角色感興趣。它還具有不區分大小寫的優點。

while (true) 
{ 
    ConsoleKeyInfo key = Console.ReadKey(); 
    Console.WriteLine(""); // Just for nice typesetting. 

    if (key.Key == ConsoleKey.N) 
    { 
     Console.WriteLine("NO"); 
     break; 
    } 

    if (key.Key == ConsoleKey.Y) 
    { 
     Console.WriteLine("YES"); 
     break; 
    } 
} 
+0

+1 ConcoleKey是更好的方法 – exexzian