-2

1.so break statement just break out the inner for loop or both?

for(j=0;j<n;j++)
{
    for(k=0;k<n;k++)
    {
        if(grid[j][k]=='p')
        {
            x=j;
            y=k;
            break;
        }
    }
}
4

3 回答 3

2

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
于 2013-08-11T13:27:29.700 回答
0

您只能突破 C 中的当前范围,因为 C 在“后进先出”系统中工作。

在 2 个循环内,您只能跳出当前所在循环的范围。因此,您需要设置一个标志,然后中断,然后在外循环中检查该标志,然后检查该标志是否存在,重置标志并中断。

于 2013-08-11T13:19:01.593 回答
0

break仅从使用它的直接循环中中断。要打破剩余循环,请使用gotoor 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;   
}
于 2013-08-11T13:33:49.650 回答