else语句遵循哪个顺序?

时间:2016-02-29 12:02:27

标签: c if-statement conditional

我想确定一些事情,

当我有多个if/else条件且if并不意味着else个条件之一if条件;下一个else语句是否适用于最后一个if语句?

例如:

if(condition1)
{
    //operation1
}

if(condition2)
{
    //operation2
}

else
{
    //operation3.  
}

如上例所示,如果我没有使用else作为第一个if语句,if语句执行此else是为了什么?如果我没有为每个else指定if,这会对我造成问题吗?

我做了一些测试,但想确定这实际上是如何运作的。

12 个答案:

答案 0 :(得分:12)

来自Standard, p 6.8.4.1

  

如果语法允许,则else与词法上最接近的前一个相关联。

因此,在您的示例中,else属于第二个ifcondition2的那个)。

答案 1 :(得分:3)

在C(以及其他类C语言编程语言)中,您可以添加额外的荣誉以使语句更清晰。您的代码相当于:

{
    if(condition1) {
        //operation1
    }
}

{
    if(condition2) {
        //operation2
    } else {
        //operation3.  
    }
}

else语句与第二个if语句绑定。这意味着该计划将首先评估condition1。如果condition1成立,则会执行operation1。接下来无论第一次测试的结果如何,它都会测试condition2。如果condition2成立,则会执行operation2,否则将执行operation3。 else始终与最近的if(自下而上)绑定,该else(自下而上)尚未被 BEGIN; INSERT INTO par VALUES(par_party_uid_seq.nextval,:p1_Party_name); INSERT INTO par VALUES(ser_service_uid_seq.nextval,:p2_Service_name); END; 限制,或者使用花括号作为另一个绑定策略的括号。

答案 2 :(得分:2)

  

如果我没有对第一个if语句使用else,if else的if语句是否适用?

第二个if声明。
规则是else将在多个if的情况下与最近的if一起使用。

C11§6.8.4.1/ 3:

  

else与语法允许的词法最近的前if相关联。

答案 3 :(得分:2)

else语句绑定到最后一个if语句。由于第二个if语句

,第一个if语句没有else

答案 4 :(得分:2)

在if语句(或它的块)之后必须始终直接跟随else语句。因此,示例中的else会影响if(condition2)

答案 5 :(得分:2)

最近的。如果语法允许,则else与词法上最接近的前缀相关联。

if(condition1)
{
//operation1
}

if(condition2)
{
//operation2
} else {          // <<<<
//operation3.  
}

答案 6 :(得分:2)

引用C11标准,章节§6.8.4.1, The if statement 强调我的

  

else词汇最接近的前if 相关联   语法。

因此,您的else语句绑定到 词法最近的 if语句,即if(condition2)语句。< / p>

答案 7 :(得分:2)

'else'始终附加到最近的'if'。换句话说,最后一个与最后一个if配对。

最好是可读性使用花括号和适当的缩进。

答案 8 :(得分:2)

始终与其前面的if语句相关。

答案 9 :(得分:1)

我不知道你想要做什么?但你可以使用if / else if语句,你可以使用swtich。

example if-else:

      if(condition 1)
      {
        // your code here
      }
      else if(conditition2)
      {
         //your code here
      } 
      else
      {
        // your code here
       } 

or a swtich:
var caseSwitchLastName = "De Waard"
var caseSwitchFirstName = "Pieter";
switch (caseSwitchFirstName)
{
    case Pieter:
       Console.WriteLine("His name is Pieter");
       break;
    case Sander:
       Console.WriteLine("His name is Sander");
       break;
    default:
       Console.WriteLine("His name is de Waard");
       break;
} 

两个代码具有相同的输出。只有示例更少打字。

答案 10 :(得分:1)

有三种不同类型的选择陈述。

单一选择声明(如果)

  • 仅在条件为真时才执行操作

双重选择陈述(如果......其他)

  • 如果条件为真,则执行操作;如果条件为假,则执行另一个操作

多选语句(转换)

  • 根据常量内部表达式的可能值执行不同的操作

在你的情况下,第一个if是单个选择语句,当它到达块的结尾时,它将继续顺序处理程序中的以下语句。

因为你的其他人就在你的第二个之后,因此它使这个陈述成为双重选择陈述。如果结果为真,则执行if块中的操作;如果结果为假,则执行else中的操作。

答案 11 :(得分:0)

如果在else之前,那么else就是最后一个。

你可以在这里看到更多:http://www.cplusplus.com/doc/tutorial/control

祝你好运!