2

使用以下 c++ 示例(有意省略了缩进)。

if(condA)          // if #1
if(condB)          // if #2
if(condC)          // if #3
if(condD)          // if #4
funcA();
else if(condD)     // else #1 if #5
funcB();
else if(condE)     // else #2 if #6
funcC();
else               // else #3
funcD();
else if(condF)     // else #4 if #7
funcE();
else               // else #5
funcF();

什么else是指什么if以及这方面的规则是什么?(是的,我知道使用{ }会解决这个问题)。

4

6 回答 6

5
if(condA)          // if #1
    if(condB)          // if #2
        if(condC)          // if #3
            if(condD)          // if #4
                funcA();
            else if(condD)     // else #1 if #5
                funcB();
            else if(condE)     // else #2 if #6
                funcC();
            else               // else #3
                funcD();
        else if(condF)     // else #4 if #7
            funcE();
        else               // else #5
            funcF();
于 2010-08-02T22:32:29.280 回答
3

每个else总是指最内在的if可能。

所以

if (a)
if (b) B;
else C;

相当于

if (a) {
  if (b) B;
  else C;
}
于 2010-08-02T22:33:20.713 回答
1

永远不要在生产环境中编写这样的代码。它会咬你。

于 2010-08-02T22:34:15.020 回答
1

DeadMG 是对的。以防万一您有兴趣,规则是

else附加到最后一个 free (即不受大括号保护且没有相应的 else)if

于 2010-08-02T22:35:42.173 回答
0

这被称为“悬空其他”问题。解决这个问题的惯例是将“else”附加到最近的“if”语句中。

悬空其他维基百科

于 2010-08-02T22:38:48.147 回答
0

C++ 知道哪个 else 匹配哪个 if,并且 C++ 编译器有恰到好处的解析器,可以在闪存中对其进行排序。问题是不擅长这个。

通过C++ 漂亮的打印机运行它,结果格式化文本将使其非常清晰。

于 2010-12-20T11:49:39.713 回答