Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是";如果。。。否则如果。。。否则……”;任何不同于;如果。。。else{if…else…}”;语义上?_C_If Statement_Language Lawyer - Fatal编程技术网

C 是";如果。。。否则如果。。。否则……”;任何不同于;如果。。。else{if…else…}”;语义上?

C 是";如果。。。否则如果。。。否则……”;任何不同于;如果。。。else{if…else…}”;语义上?,c,if-statement,language-lawyer,C,If Statement,Language Lawyer,我相信你们所有人在学习C语言时都学会了以下语法: if (condition 1) { statements } else if (condition 2) { statements } ... else { statements } 但是在阅读之后,我发现绝对没有谈论链式的else if语句,这与其他语言不同,这些语言为此提供了ElseIf或elif等关键字 根据我的理解,整个if(…){…}else{…}是一个单独的语句(else子句可能不存在,这是不相关的)。所以

我相信你们所有人在学习C语言时都学会了以下语法:

if (condition 1) {
    statements
} else if (condition 2) {
    statements
} ...
else {
    statements
}
但是在阅读之后,我发现绝对没有谈论链式的
else if
语句,这与其他语言不同,这些语言为此提供了
ElseIf
elif
等关键字

根据我的理解,整个
if(…){…}else{…}
是一个单独的语句(
else
子句可能不存在,这是不相关的)。所以当涉及到解析时,如下面的代码所示

if (condition) {}
else
    one_statement;
第二个块中缩进的
if
语句相当于缩进的
one_语句在第一个块中,用“语法‘语句’单元”表示

然后,由于C允许灵活的间距,所以空格、制表符和换行符总数为正数的任何组合都是等效的。因此,在重新设置上述代码的间距后,它将变成

if (condition) {
} else if (something else) {
} else {
}
我的理解正确吗

我发现绝对没有任何关于链式else if语句的内容

这是因为链接
if
语句并没有什么特别之处,而不是链接
if
和循环。任何链接到
else
子句末尾的内容都将成为该
else
子句的一部分:

if (x)
    ...
else if (y)
         ...
     else if (z)
             ...
          else
             ...
上面,
if(y)
属于
if(x)
else
分支,以及其分支中的整个语句链。空白并不重要,因此可以按照您在问题底部显示的方式重新格式化链


注意:C确实需要处理的是一种特殊情况,但它发生在
嵌套时,而不是链锁时。

是的,你的理解是正确的。我可以发誓这是重复的,但我找不到。美国科学
if (x)
    ...
else if (y)
         ...
     else if (z)
             ...
          else
             ...