【问题标题】:Labeled-break/continue in C# or Fortran 95 loops?C# 或 Fortran 95 循环中的标记中断/继续?
【发布时间】:2012-05-03 00:38:44
【问题描述】:

我的作业任务是将 C# 中的循环转换为 Fortran 95。

outerLoop:
  for(row = 0; row < numRows; rows++){
    for(col = 0; col < numCols; col++){
      if(mat[row][col] == 0)
        continue outerLoop;
      sum += mat[row][col];
    }
  }

正如你们中的一些人所看到的,这看起来类似于 Java 和 Perl 中使用的退出语句标签规范,据我了解,它用于中断具有嵌套循环或 'if 的循环em>' 语句,而不仅仅是一个循环/语句。我对 Java 中的这个特性还是新手,所以我不确定它是否存在于其他任何地方,特别是在 C# 和 Fortran 95 中。

我在 Google 上四处寻找,但没有找到任何相关信息。我在制定要在 Google 上使用的搜索字词时遇到了麻烦,所以这也是其中的因素。

请注意:我不是在寻找讲义答案;我只是在寻找自己在哪里找到答案。

感谢您抽出宝贵时间阅读这篇文章。

【问题讨论】:

  • 我不知道continue outerLoop 究竟做了什么,但是如果你在那个地方放一个break,它会破坏内循环并允许外循环继续。
  • 你真的很想了解 C# 中的跳转语句-msdn.microsoft.com/en-us/library/d96yfwee.aspx
  • 问题不清楚。是关于将 (invalid) C# 转换为 Fortran 还是 (Java?) 代码具有相应的直接 C# 对应项?请参阅“...将循环 in C# 转换为 Fortran 95。”
  • 鉴于此 sn-p 的可能结果,Fortran 关键字可能是 HALT_AND_CATCH_FIRE。

标签: c# fortran break continue


【解决方案1】:

有关 Fortran 95 中循环控制结构的示例,请参阅我在上一个 Fortran 问题中的示例代码,其中包含“循环”和“退出”的示例用法:Reading comment lines correctly in an input file using Fortran 90, .

【讨论】:

  • 虽然我相信 goto 有一席之地,但在这种情况下,命名循环比使用 goto 要好得多。 +1
【解决方案2】:

我相信 C# 不支持这种break x 功能。您需要使用标志手动跳出嵌套循环。

bool stop = false;
for (row = 0; row < numRows; rows++)
{
    for (col = 0; col < numCols; col++)
    {
        if (mat[row][col] == 0)
        {
            stop = true;
            break;
        }

        sum += mat[row][col];
    }

    if (stop)
        break;
}

更简单的替代方案包括goto 声明(被广泛反对);并将您的循环封装在一个专用方法中,在这种情况下,当您想停止迭代时,您只需 return

【讨论】:

  • 看了C#的跳转语句后得出的结论是1)C#的“继续标注”是不存在的,2)我的老师肯定给我们设置错了问题的说明/代码,最终导致不正确的错误。
  • @user1170036:从您的示例中,我假设您的老师指的是 goto 语句,该语句在 C# 中受支持,但强烈建议不要使用 - 特别是在学术环境中 - 因为它违反了structured programming的原则。
  • breakgoto 有何不同?也就是说,为什么break foo 可以,而goto foo 会被劝阻?
  • break foo 在 C#(或我不知道的任何其他语言)中是不允许的。 break x,我指的是某些语言(例如 PHP)中的语法,它允许规范“一个可选的数字参数,它告诉它要分解多少嵌套的封闭结构”——参见 PHP: break
猜你喜欢
  • 2020-06-09
  • 2010-09-05
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多