if()//first if
{
if()//second if
statement;
}
else
statement;
我知道这else与第一个匹配,if但我的问题是为什么?我这样想,首先if并且else在相同的范围内(例如主要本地范围),第二个if在第一个如果本地范围else没有可见性?它是否正确?
if()//first if
{
if()//second if
statement;
}
else
statement;
我知道这else与第一个匹配,if但我的问题是为什么?我这样想,首先if并且else在相同的范围内(例如主要本地范围),第二个if在第一个如果本地范围else没有可见性?它是否正确?
的基本语法if....else是:
--optional-
if(expr) stmt [else stmt]
如果你只是有你的例子减去他们会这样嵌套的括号:
---------stmt----------
if(expr) if(expr) stmt else stmt
基本上意味着else与最新的 available 绑定if,并且满足外部的语法if,因为内部if...else是一个语句
添加大括号给出(首先再次显示整体语法):
if(expr) stmt [else stmt]
--compound-stmt--
if(expr) { if(expr) stmt } else stmt
在这里,inner if(expr)..stmt 包含在复合语句(它是语句的子变体)中,最近仍然打开的(读取:在范围内)if是第一个。您还可以将复合语句的结尾(右大括号)视为关闭所有包含的句法结构。
没有compound if,只有一个if控制复合语句。
语法如下:
'if' '(' <condition> ')' <statement-1> [ 'else' <statement-2> ]
后面有一个语句if,并且在 optional 后面有一个语句else。每个语句都可以是一个块语句,在这种情况下,您必须将它括在一对花括号中。
由于您确实有花括号,因此嵌套在上面的语法中if是 a <statement-1>;因此,else属于外if。
请注意,如果您删除花括号,else将属于内部if.
else与第一个匹配的原因if是因为你强迫它与{and}
他们做什么{和}做什么是将任意数量的语句转换成代码“块”,由控制语句(如if)处理,类似于单个语句
如果您的代码没有将第二个 if 语句放入如下块中
if()//first if
if()//second if
statement;
else
statement;
那么else实际上将对应于第二个 if
“我知道 else 匹配第一个 if 但我的问题是为什么?”
为什么要这样设计?
所以可能会有这样的陈述:
if (istrue)
if (thatstrue) dosomething ();
else donothing2 ();
else donothing1 ();
无需另外写括号,如下所示:
if (istrue){
if (thatstrue) dosomething ();
else donothing2 ();
} else donothing1 ();
另请注意,制表符无关紧要 - 它不会影响else执行哪个语句。