尝试在 C# 中比较字符
Posted
技术标签:
【中文标题】尝试在 C# 中比较字符【英文标题】:Trying to compare chars in C# 【发布时间】:2012-12-09 15:29:38 【问题描述】:我是 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,它也总是进入循环,即使它也永远不会离开循环很明显这是错误的。
如果有人能给我一些关于为什么会发生这种情况的见解,或者如果有人可以提出更好的方法来做这件事,我们将不胜感激。谢谢。
卡里姆
【问题讨论】:
我认为你应该这样做:While(!(input[0] == 'Y' || input[0] == 'N')) 【参考方案1】:现在,您的 while 语句中的条件将始终为真。对此进行测试的一个好方法是在正在测试 while 循环的位置放置一个断点,然后在条件的每个部分“添加监视”。
改变
while ((input[0] != 'N') || (input[0] != 'Y'))
到
while ((input[0] != 'N') && (input[0] != 'Y'))
【讨论】:
【参考方案2】:正如大家已经指出的那样,您使用的是||
,而您应该使用&&
。
除此之外,您还尝试访问可能为空的字符串的第一个字符。如果用户只是按“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;
【讨论】:
【参考方案3】:问题在于条件检查。
while ((input[0] != 'N') || (input[0] != 'Y'))
假设输入了 'N'。
现在条件(input[0] != 'Y')
变为 false 并且它应该跳出 while 循环但是因为 || (input[0] != 'N')
保持 true,条件的最终结果是 true,因此它永远不会跳出循环。
将 || 替换为 &&
【讨论】:
【参考方案4】:试试这个:-
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();
【讨论】:
【参考方案5】:嗯,你的情况就是问题所在。您的两个条件是 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();
【讨论】:
以上是关于尝试在 C# 中比较字符的主要内容,如果未能解决你的问题,请参考以下文章