如何在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语言中跳出多重循环
最新推荐文章于 2024-03-21 17:37:25 发布