在C#中,即使条件为假也无法跳出if语句块
我正在用C#控制台应用程序编写一个非常简单的决策游戏,并且想让用户从1 或2 中选择,以得到一个确定的答案。我也希望它能够验证用户的输入,当输入不是1 或2,或只是空格时,告知用户并重新加载问题。
因此我设置了一个 if 循环来检查 if user input is NullOrWhitespace OR is NOT equal to 1 OR is NOT equal to 2,如果这些条件成立,就向用户输出“输入错误”并重新加载问题。
为了重新加载问题,它们位于一个 while 循环中,该循环在 bool (runAgain) = true 为真时执行。我在我的if语句中把这个布尔值设为true,以便错误时再次运行。if语句和重新开始问题的部分工作得很好,没有问题。
问题在于 else if 语句(当输入等于1 时执行)和 else 语句(应该在输入等于2 时执行)。它们只是执行了if循环(错误输入)。
说实话我也没搞懂为什么会这样,但下面是代码。很可能只是一个非常容易修复的小问题——我刚接触这一切,所以不太理解为什么会这样,如果我的问题表达不清楚,请见谅。
bool runAgain = true;
while (runAgain)
{
Console.WriteLine(/*My question to user*/);
Console.WriteLine(/*Ask user to pick 1 or 2*/);
string answer = Console.ReadLine();
answer = answer.Trim();
if (string.IsNullOrWhiteSpace(answer) || answer != "1" || answer != "2")
{
Console.WriteLine("Wrong Input");
runAgain = true;
}
else if (answer == "1")
{
runAgain = false;
//code to execute if 1 is inputted
}
else
{
runAgain = false;
//code to execute if 2 is inputted
}
}
解决方案
answer 不可能同时是 "1" 和 "2",因此:
answer != "1" || answer != "2"
将始终是 true。
因此,第一个 if 条件将始终是 true,你将永远不会执行 else 子句。
你需要在它们之间使用 &&(AND)来检查它们是否都不是:
//------------------------------------------------------vv----------------
if (string.IsNullOrWhiteSpace(answer) || (answer != "1" && answer != "2"))
(我还添加了括号以提高可读性,尽管由于 运算符优先级 的原因,它们并非严格必要。)
此外在这种情况下(如 @Charlieface评论所述),第二个检查(带有 &&)使得第一个检查(带有 IsNullOrWhiteSpace)实际上变得冗余。
因此你可以简单地使用:
if (answer != "1" && answer != "2")
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。