C语言中跳出多重循环

如何在C语言中跳出多重循环?

如何在C语言中跳出多重循环?——C足够强大,唯一限制你的就是思维

问题的提出:如何快速跳出多重循环,例如一个数组,如果要检查数组内有无相同的变量,如果有就置标志跳出。

#define MAX_SIZE 4
UINT i,j,nBits[MAX_SIZE];
BOOL bValid;

bValid = FALSE;
for(i = 0; i < MAX_SIZE; i++)
{
for(j = (i + 1); j < MAX_SIZE; j++)
{
   if(nBit[i] == nBit[j])
   {
    bVlid = TRUE;
    break;
   }
}
    ????;//How to break all the loops??,it's a problem
}
具体的解决办法如下,当然有很多,这儿只是取典型的3种而已。

#define MAX_SIZE 4
UINT i,j,nBits[MAX_SIZE];
BOOL bValid;

bValid = FALSE;
for(i = 0; i < MAX_SIZE; i++)
{
for(j = (i + 1); j < MAX_SIZE; j++)
{
   if(nBit[i] == nBit[j])
   {
    bVlid = TRUE;
    GOTO JUMP_HERE;
   }
}
}
    ...
JUMP_HERE:
    ...

但是很多人都不喜欢用GOTO,因为C语言教材里面写着,慎用,和指针一样这些都是双刃剑,练习梅超风的18节鞭子不误抽自己几下是练不成的。

#define MAX_SIZE 4
UINT i,j,nBits[MAX_SIZE];
BOOL bValid;

bJumpFlag= FALSE;
for(i = 0; i < MAX_SIZE; i++)
{
for(j = (i + 1); j < MAX_SIZE; j++)
{
   if(nBit[i] == nBit[j])
   {
    bVlid = TRUE;
    break;
   }
}
    if(bVlid   == TRUE)
    break;
}

这个办法是比较平实的招数,实用不华丽。但是如果循环更多一些,或者是判断跳出逻辑更复杂一些,看起来可能就有点不爽了。

#define MAX_SIZE 4
UINT i,j,nBits[MAX_SIZE];
BOOL bValid;

bValid = FALSE;
for(i = 0; i < MAX_SIZE; i++)
{
for(j = (i + 1); j < MAX_SIZE; j++)
{
   if(nBit[i] == nBit[j])
   {
    bVlid = TRUE;
    i = MAX_SIZE;
    break;
   }
}
}

最简洁的方式,华丽,高效而且实用,眼前一亮吧?

你可能感兴趣的:(C语言中跳出多重循环)