试图比较C#中的字符

时间:2012-12-22 06:02:59

标签: c# input while-loop compare character

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

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

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();
} 

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

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

如果有人能够给我一些关于为什么会发生这种情况的信息,或者如果有人可能提出更好的方法,那么请非常感谢。谢谢。

卡里姆

5 个答案:

答案 0 :(得分:9)

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

更改

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

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

答案 1 :(得分: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;
    }
}

答案 2 :(得分:1)

问题在于条件检查。

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

假设输入了'N'。 现在条件(input[0] != 'Y')变为 false 并且它应该突破while循环但是因为|| (input[0] != 'N')保持 true ,条件的最终结果是 true ,因此它永远不会脱离循环。

|| 替换为&amp;&amp;

答案 3 :(得分: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();
        }

答案 4 :(得分:0)

你的病情是好的。你的两个条件是Ored,这意味着如果其中一个条件为真,那么循环将执行。所以你首先或条件而不是结果如下所示!(condition1 || condition2)如下所示

        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();
        }