试图比较C#中的字符

Jah*_*ows 10 c# compare input character while-loop

我是C#的新手我已经开始学习它以扩展我的编程语言,但我遇到了一个我在C和Java都没有遇到过的小问题.

我试图从键盘获得用户响应,然后将其与可能的情况进行比较,如果这些情况都不匹配,那么我希望用户必须重复该过程,直到他输入正确的值.

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();
} 
Run Code Online (Sandbox Code Playgroud)

到目前为止,这不是我尝试过的最有效的方法,我也尝试过做while while循环和许多其他变种.

我遇到的问题是,当while循环未被激活时,一切正常,但是当我添加它时,它总是进入循环,即使输入是N或Y并且即使很明显,它也永远不会离开循环这是错误的.

如果有人可以给我一些关于为什么会发生这种情况的信息,或者有人可能提出更好的方法来做这件事,我将不胜感激.谢谢.

卡里姆

Bra*_*don 10

现在,while语句中的条件总是为真.测试这个的一个好方法是在测试while循环的地方放置一个断点,然后在条件的每个部分"添加监视".

更改

while ((input[0] != 'N') || (input[0] != 'Y'))
Run Code Online (Sandbox Code Playgroud)

while ((input[0] != 'N') && (input[0] != 'Y'))
Run Code Online (Sandbox Code Playgroud)


Erg*_*wun 5

正如每个人都已经指出的那样,您正在使用||应该使用的地方&&

除此之外,您还尝试访问可能为空的字符串的第一个字符。如果用户只是按“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;
    }
}
Run Code Online (Sandbox Code Playgroud)