if语句中的语句

时间:2014-12-13 17:04:44

标签: c# .net if-statement

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

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

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

我知道如何制作此代码&#34;清洁&#34;通过修改

但是我试图理解Csharp实际上是如何使用这个错误的代码行事,执行此代码背后的逻辑

根据我的阅读,其他适用于最接近的if,在这种情况下(如果&gt; = 5)。

因此,当我写i = 3时,它会读取第一个if并转到第一个,而控制台会给我&#34; Case nr 2&#34;。

当我写i = 7时,它会读取第二个并给我&#34;案例nr 1&#34;

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

根据我的理解,在研究它时应该从2开始,如果之前已经过测试,那么根据我的理解,当它测试第一个是否应该去其他地方,如果它同时测试两个&# 39,因为if不是真的有道理,所以它也应该排在第二位。

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

所以我的思维方式确实是错的,但我无法找到它为什么不显示任何东西

2 个答案:

答案 0 :(得分:5)

这就是你的if循环的工作原理(我修改了代码并添加了大括号):

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

所以内部的else对应if条件i >= 5因此当你的i = 13时,它表现得像:

 is i < 10? No

因此,如果并执行下一个陈述,即Console.ReadLine();

,则永远不会进入

答案 1 :(得分:2)

您的代码是这样的:

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号

一些提示:

  • 考虑使用一些众所周知的代码约定
  • 使用缩进来使代码更具可读性
  • 使用打开和关闭花括号,无论您有一个带有一个语句的块还是多个语句
  • 尽量不要在你的代码中加入一些魔法文本,这里的“案例”和“案例”可能会导致以后的问题主要出现在测试场景中