尝试在C#中比较字符

11

我刚开始学习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();
} 

这绝不是我尝试过的最有效的方法,我还尝试了使用do while循环和许多其他变体。

我遇到的问题是,当while循环未激活时,一切正常运行,但当我添加它时,即使输入为N或Y,它也总是进入循环,并且永远无法离开循环,尽管很明显是错误的。

如果有人能给我一些见解,解释为什么会发生这种情况,或者如果有人可以提出更好的解决方法,那将非常感激。谢谢。

Karim


我认为你应该这样做: 当(!(input[0] == 'Y' || input[0] == 'N'))时,执行某些操作。 - It'sNotALie.
5个回答

11

现在,你的while语句中的条件始终为真。测试这一点的好方法是在while循环被测试的地方设置断点,然后“添加监视”以查看条件的每个部分。

更改:

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

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

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

1

问题出在条件检查上。

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

假设输入了'N'。 现在条件(input[0] != 'Y')变为false,应该跳出while循环,但由于与(input[0] != 'N')的||仍然是true,因此条件的最终结果是true,因此它永远不会跳出循环。
||替换为&&

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

0

你的问题在于条件。你的两个条件是“或”,也就是说,如果其中一个条件为真,则循环将执行。因此,你需要先将这些条件进行“或”运算,然后再对结果进行“非”运算,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接