if-else连用时的陷阱

  近日,在实现《The C  Programing Language》上的一个练习题时,写出了下面一段代码

for(i=left+1; i<=right; i++)
    {
        if(reverse == 0)
            if( (*comp)(v[i], v[left]) < 0 )
                swap(v, i, ++last);
        else
            if( (*comp)(v[i], v[left]) > 0 )
                swap(v, i, ++last);
    }

  本意是第一个 if 和 else 相匹配,但是为了代码简洁,效仿《TCPL》上的普遍做法,省略掉了花括号,

结果却忽视了if-else语句的结合规则,导致else和它紧邻的那个if相结合,因而使程序结构完全发生变化,变成如下所示结构

for(i=left+1; i<=right; i++)
    {
        if(reverse == 0)
            if( (*comp)(v[i], v[left]) < 0 )
                swap(v, i, ++last);
            else if  ( (*comp)(v[i], v[left]) > 0 )
                swap(v, i, ++last);
    }        

  所以,还是带上花括号比较好

for(i=left+1; i<=right; i++)
    {
        if(reverse == 0)    {
            if( (*comp)(v[i], v[left]) < 0 )
                swap(v, i, ++last);
        }       
        else if( (*comp)(v[i], v[left]) > 0 )
                swap(v, i, ++last);
    }

 

posted @ 2018-04-03 22:29  l_____py  阅读(329)  评论(0编辑  收藏  举报