在我们写二层循环时,若满足某一条件想要退出外层循环的时候,如果只写break就只会退出内层循环,代码如下:
int main(){
for(int i=1;i<4;i++){
for(int j=0;j<3;j++){
if(i==2 && j==2) {
break;
}
printf("(%d,%d)\n",i,j);
}
}
printf("end");
}
我们可以从结果看出当i == 2&&j == 2时,只是退出了当前的内层循环,并没有退出外层循环,所以没有打印(2,2),后面的(3,0)(3,1)(3,2)依然打印。
以下为处理方法:
使用goto语句,可以为外层循环后的语句打个标签,然后goto这个标签就可以了。
int main(){
for(int i=1;i<3;i++){
for(int j=0;j<3;j++){
if(i==2 && j==2) {
goto flag;
}
printf("(%d,%d)\n",i,j);
}
}
flag: printf("end");
}
这时我们可以看出,当条件满足i == 2&&j == 2时,直接跳出外层循环到flag出,跳出后从flag标签处的语句开始执行。
方法二:可以为内层循环加一个判断条件。具体代码如下:
int main(){
bool flag = true;
for(int i=1;i<3;i++){
if(flag){
for(int j=0;j<3;j++){
if(i==2 && j==2) {
flag = false;
}
printf("(%d,%d)\n",i,j);
}
}
else break;
}
printf("end");
}
我们可以看出,这种方法也起到了退出外层循环的作用。
本人新手,若有错误,请大佬斧正。