【问题标题】:so break statement just break out the inner for loop or both in c [closed]所以break语句只是打破了c中的内部for循环或两者[关闭]
【发布时间】:2013-08-11 13:08:40
【问题描述】:

1.so 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 语句在处理多个内部循环时用作后进先出原则。顺便说一句,这应该很容易通过保留调试消息自己发现。
  • 通常事实证明,像这样的问题背后还有另一个问题。您是否正在尝试使用 break 解决一些问题,但它没有按照您的假设进行?
  • 那么我应该怎么做才能在 grid[j][k]=='p' 时退出循环
  • @RohitVerma 如果您想知道如何退出嵌套循环,请编辑您的问题以反映这一点。

标签: c loops break


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      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;   
      }
      

      【讨论】:

      • 如果我错了请不要介意....但是自从第一次休息以来;正在打破内循环......所以我需要先使用 if(flag==1) break;声明??
      • 第一个 break 脱离了 if 循环而不是内部 for 循环。因为,根据您的需要,您也想跳出剩余的循环,请为您想要跳出的每个剩余循环使用break。感谢您的评论。如果对您有帮助,请为答案投票! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多