if 语句中的 if 语句

本文关键字:if 语句 | 更新日期: 2023-09-27 18:34:06

我试图理解这段代码背后的逻辑

int i = 13;
if (i<10) if (i>=5)   Console.WriteLine("Case number 1");
else Console.WriteLine("case number 2");
Console.ReadLine();

所以我知道这不是正确的代码(因为应该有括号来使这个应用程序工作(。

我知道如何通过修改它来使这段代码"干净">

但我试图了解 Csharp 实际上如何处理这个错误的代码,以及执行此代码背后的逻辑

从我读到的内容来看,else 适用于最接近的 if,在这种情况下(如果>= 5(。

因此,当我写 i = 3 时,它会读取第一个 if 并转到第一个 else 和控制台给我"Case nr 2"。

当我写i = 7时,它读到第二个并给我"案例 nr 1">

当我写i = 13时,它什么也没给我

根据我在研究时的理解,它应该去其他,因为 2 if 之前已经测试过,所以从我的理解来看,当它测试第一个如果它应该去其他,如果它测试两个如果,它也应该去第二个,因为 if 真的没有意义。

如果它只测试第二个,如果它应该给我案例编号。

所以我的思维方式肯定是错误的,但我找不到为什么它没有显示任何东西

if 语句中的 if 语句

这就是你的if循环的工作方式(我加入了你的代码并添加了大括号(:

int i = 13;
if (i<10) {
    if (i>=5) {  
        Console.WriteLine("Case number 1");
    } else {
        Console.WriteLine("case number 2");
}
Console.ReadLine();

所以 inner else 对应于 if 与条件 i >= 5 因此,当您的 i = 13 时,它的行为如下:

 is i < 10? No

因此永远不要输入 if 并执行下一个语句,即 Console.ReadLine();

你的代码是这样的:

if (i < 10)
{
    if (i >= 5) {
        Console.WriteLine("Case number 1");
    }
    else {
        Console.WriteLine("case number 2");
    }
}
Console.ReadLine();

因此,如果i[5,10),则为案例编号 1,如果它在(-Infinity,10)则为案例编号 2

一些提示:

  • 考虑使用一些众所周知的代码约定
  • 使用缩进使代码更具可读性
  • 使用左大括号和右大括号,无论您的块包含一个语句还是多个语句
  • 尽量不要在代码中使用一些魔术文本,这里的"案例"和"案例"可能会在测试场景中给您带来以后的问题