C# 不要退出循环

C# 不要退出循环,c#,do-while,C#,Do While,一个关于C#的快速问题。我已经在下面展示了我的代码,我无法理解为什么循环永远不会关闭,当用户输入“A”或“B”等时,Do-While循环应该关闭,这听起来像是一个愚蠢的问题,我刚刚开始C# 您需要使用“&&”而不是“| |”,因为您希望在不输入a、b、c或d时退出。目前,它将永远运行,因为a始终不是“a”或“b”。将or条件替换为AND(&&&)! 因为如果您键入一个'A',(A='A'),那么“A!='B'”为真,或者条件为真…您应该在您的条件中使用&&。 当用户输入大写或小写的A或B时,您希

一个关于C#的快速问题。我已经在下面展示了我的代码,我无法理解为什么循环永远不会关闭,当用户输入“A”或“B”等时,
Do-While
循环应该关闭,这听起来像是一个愚蠢的问题,我刚刚开始C#


您需要使用“&&”而不是“| |”,因为您希望在不输入a、b、c或d时退出。目前,它将永远运行,因为a始终不是“a”或“b”。

将or条件替换为AND(&&&)!
因为如果您键入一个'A',(A='A'),那么“A!='B'”为真,或者条件为真…

您应该在您的条件中使用&&。
当用户输入大写或小写的A或B时,您希望循环停止。为了确保您只想在用户输入的不是A而不是B(大写或小写)时继续循环

除了解决问题之外,我建议您采用更安全、更清晰的方法,当您的代码在用户输入多个或少个字符时引发异常,并强制用户按ENTER键

使用此代码,用户只需按一个键,大小写都无所谓:

char a;
do
{
    Console.WriteLine("Which one would you like to buy? A B C or D");
    a = Char.ToUpper(Console.ReadKey().KeyChar);
    Console.WriteLine();
} while (!"ABCD".Contains(a));

其思想是,只有当用户输入“A”、“B”、“C”或“D”时,循环才应该退出,如果用户不输入,则循环应该继续运行。如果用户输入“A”,则他们输入的字母不等于“B”、“C”或“D”,因此循环中的测试始终为真。@Adam-或者您可以打开
=
进入
=
@Adam——Matt仍然是对的,你需要使用
&
,因为你想说“如果不等于A,不等于B,不等于C,不等于D,那么继续循环”你想要的是
&
而不是
|
。如果
a==“a”
那么
a!='B'
循环继续。如果
a==“B”
那么
a!='一个“
,循环继续。无论
a
是什么,其中一个表达式将为真,使整个条件为真,循环将继续。我们同时给出解决方案!当我开始回答时,没有其他人能解释为什么它更安全、更清晰?a=='a'比!“A..”包含(A)和更高效的…@Didier68:更安全,因为用户可以键入“aa”并按enter键(在原始代码中),这将导致
Convert.ToChar
抛出
格式异常。使用
ReadKey
可以确保您只查看一个字符。@Didier68:Cleaner(使用
!“ABCD.”Contains(a)
)是有争议的,但我怀疑在要求用户按一个键的循环中,性能是否有任何实质性差异。我并没有提到效率,无论如何,如果代码更易于阅读和维护,那么多花几毫秒是非常受欢迎的。如果明天有更多的选择,在这里添加它们比使用原始方法容易得多。强制用户按ENTER键也是如此p当我开始回答时,没有人回答,你可能在我起草答案时发了帖子。
char a;
do
{
    Console.WriteLine("Which one would you like to buy? A B C or D");
    a = Char.ToUpper(Console.ReadKey().KeyChar);
    Console.WriteLine();
} while (!"ABCD".Contains(a));