1.所以break语句只是打破内部for循环还是两者都打破?
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
if(grid[j][k]=='p')
{
x=j;
y=k;
break;
}
}
}
break
只会中断内部循环。如果需要在找到元素后立即展开,请使用goto
。尽管在这种情况下,您可以使用其他技术(如设置标志)来避免goto
。在我看来,在这种用法中,goto
是一个干净的选择,尤其是当循环嵌套很深时。
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
if(grid[j][k]=='p')
{
x=j;
y=k;
goto found;
}
}
}
found:
//other processing
您只能在C中突破当前范围,因为C在"后进先出"系统中工作。
在2个循环中,您只能突破当前循环的范围。因此,您需要设置一个标志,然后中断,然后在外循环中,检查该标志,如果该标志存在,则重置该标志并中断。
break
仅从使用它的立即循环中断。使用goto
或flags
断开剩余回路。如果不能使用goto
,则设置标志。以下是使用标志时代码的外观:
int flag = 0; //set a flag and initialize it to zero
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
if(grid[j][k]=='p')
{
x=j;
y=k;
flag = 1; // set flag to 1
break;
}
if (flag == 1) break;
}
if (flag == 1) break;
}