否则如果&大括号

时间:2017-07-06 02:24:05

标签: c++ c if-statement parentheses

为什么这两个代码段有不同的输出?

它们之间的唯一区别是每个if / else-if语句的大括号,但这不重要,对吧?

while (1){
    if (i>=n&&j<0)
        break;

    else if (j<0)
        if (Arr[i])
            c++;

    else if (i>=n)
        if(Arr[j])
            c++;

    else if (Arr[i]==1&&Arr[j]==1)
        c+=2;

    i++;
    j--;
}

...

while (1){
    if (i>=n&&j<0){
        break;
    }
    else if (j<0){
        if (Arr[i])
            c++;
    }
    else if (i>=n){
        if(Arr[j])
            c++;
    }
    else if (Arr[i]==1&&Arr[j]==1){
        c+=2;
    }
    i++;
    j--;
} 

2 个答案:

答案 0 :(得分:11)

如果您正确格式化了第一个代码段

while (1){
    if (i>=n&&j<0)
        break;

    else if (j<0)
        if (Arr[i])
            c++;

        else if (i>=n)
            if(Arr[j])
                c++;
            else if (Arr[i]==1&&Arr[j]==1)
                c+=2;

    i++;
    j--;
}

然后可以看到else或者如果对应于最接近的if语句。

答案 1 :(得分:0)

解析器将else-branch与最近的if相关联,因此它将解析类似

的表达式
if(a) if(b) c; else d;

作为

if(a) {if(b) c; else d;}

而不是

if(a) {if(b) c;} else d;