所以break语句只是在c中中断内部for循环或同时中断两者



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仅从使用它的立即循环中断。使用gotoflags断开剩余回路。如果不能使用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;   
}

最新更新