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
执行哪个语句。