尝试比较c#中的字符

本文关键字:字符 比较 | 更新日期: 2023-09-27 17:49:27

我是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,它也总是进入循环,并且即使很明显它是错误的,它也永远不会离开循环。

如果有人能给我一些见解,为什么会发生这种情况,或者如果有人可能会提出一个更好的方法来做到这一点,我将不胜感激。谢谢你。

卡里姆

尝试比较c#中的字符

现在,while语句中的条件将始终为真。测试这个问题的一个好方法是在测试while循环的地方设置一个断点,然后在条件语句的每个部分加上"Add watch"。

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

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

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

除此之外,您还试图访问字符串的第一个可能为空的字符。这将导致一个异常,如果用户只是点击'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;
    }
}

问题在状态检查。

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

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

替换 | | ,和

试试这个:-

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

问题出在你的身体状况上。您的两个条件为"或",这意味着如果其中一个条件为真,则循环将执行。因此,您首先或条件,而不是结果,如!(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();
        }