C语言,嵌套的多个循环或者多个递归,break和return只能跳出一层,怎样可以从最里层跳出整个嵌套,想到了

goto,但是网上又说goto不安全,可以的话 告诉我解决方法 和为什么goto不安全,举个例子更好

1、goto不是和新手使用不代表老司机们用不好他

2、break只能跳出一层, 想要跳出多层要自己想办法,适当的加一些判断和状态变量,一层一层跳,在跳出一层判断下满足某个条件下再来个break

#include <stdio.h>
void arrSet(int c[][4]);
void arrPrint(int b[][4]);
int main(){
int a[5][4];
int i;
int j;
int m = 1;
int flagBrkTwoFor = 0;
arrSet(a);
printf("原数组:\n");
arrPrint(a);
printf("break 选择性的输出:\n");
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",a[i][j]);
if(j==1)
{
if(i==2)
{
flagBrkTwoFor = -1;
}
break;
}
}
if(flagBrkTwoFor)
{
break;
}
}
return 0;
}
void arrSet(int c[][4])
{
int i;
int j;
int m = 1;
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
c[i][j] = m++;
}
}
}
void arrPrint(int b[][4])
{
int i;
int j;
printf("\n");
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
printf("%6d", b[i][j]);
}
printf("\n");
}
printf("\n");
}
原数组:
1     2     3     4
5     6     7     8
9    10    11    12
13    14    15    16
17    18    19    20

break 选择性的输出:
1 2 5 6 9 10 请按任意键继续. . .

追问

其实我想知道的是递归函数,在最里层跳出来,是不是就只有goto 强制跳出的方法,因为,写这么多的判定标志来控制,既浪费时间,又浪费空间

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-01-26
goto强制跳转,用次数一多了就晕了呢。。。所以新手不推荐用。

return不是跳一层,直接就返回了。break和continue是一层,不过可以在break以前写一些额外的语句来跳出多层。比如
for(i=0;i<M;i++){ for(j=0;j<N;j++){if (xxx) {i=M;j=N;break;}}}
第2个回答  2017-01-26
可以声明一个bool变量,若要跳出则设置为true,然后在每个循环结尾加入一个if语句检查是否为true,若是则跳出
(其实goto也没怎么不好,goto跳出多层循环是很方便的,没有安不安全之说只要你保证程序没写错即可)