比如有个链表,当我们在遍历使用一个结点时,首先要判断这个结点是否为空,不为空了我们才能处理他的下个结点(注意对于结点的处理并不统一),如果用if嵌套大致如下:
if(pNode != NULL)
{
process1(pNode);
pNode = pNode->next;
if(pNode != NULL)
{
process2(pNode);
pNode = pNode->next;
......
}
}
这样会将if嵌套的很长,不能再丑了。如果要在为NULL做出返回失败的处理,就还需要写else语句。
我想的一个解决方法是利用while和switch。如下:
int iFlag = 1;
while(pNode != NULL)
{
switch(iFlag)
{
case 1:
process1(pNode);
break;
case 2:
process2(pNode);
break;
case 3:
...
case n:
processn(pNode);
break;
default:
break;
}
}
return iFlag != n ? -1 : 0;
这样代码看起来相对清晰些。
在做的时候又发现一个误区:switch是从第一个满足条件的分支开始,如果不碰到break或别的跳转语句,下面的代码都会被执行。这是个很好的点,有时候可以用此来达到一些别的效果。