在Java中,可以使用这样的构造来从外部循环中转义:
int[][] matrix;
int value;
...
outer: {
for(int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (matrix[i][j] == value)
{
System.out.println("value " + value + " found in cell (" + i + "," + j + ")");
break outer; //HERE, or "continue outer;"
}
System.out.println("value " + value + " not found");
}
C中是否有类似的结构(没有++)?
问题是,我的问题是解决一个稍微不同的点,上面我给了一个简单的例子。如果我有3个周期(或更多)。在周期3中,我需要立即中断周期2,但不中断周期1。我可以在循环中写后藤吗?
for()//#1
for()//#2
for()//#3
{
// continue for()#1
}
感谢您提供有关如何创建标志的提示。我意识到可以这样做,但我想知道是否有可能在C中像在Java中一样做同样的事情。了解C语言的功能。该程序只是一个例子。
4条答案
按热度按时间zvms9eto1#
C语言的逻辑是不同的:你可以使用一个forward
goto
,并将标签放在循环的末尾,而不是从外部的标签循环中断开:goto
一直是C语言的一部分,从外部循环中断是一个典型的使用,这不是一个问题,在失败的情况下跳转到公共退出路径是goto
的另一个很好的使用,但是有太多goto
语句的程序,特别是向后跳转很难理解,甚至更难调试,所以为了限制使用从外部循环中断,在Java、JavaScript和其他语言中引入了带标签的循环,而goto
在这些语言中不可用。但是请注意,使用额外的变量来避免标签是相当容易的,并且它使代码的逻辑更加明显:
owfi6suc2#
这样的代码片段通常放在一个函数中,然后当找到您搜索的值时,您可以只使用
return
。范例:
Demo
在添加的代码段中:
你可以把
for()//#2
和for()//#3
放在一个函数中:cvxl0en23#
首先是一些与你的代码相关的评论。这两个声明
应该放在for循环之外。循环应该只做一件事:以确定在
matrix
中是否存在等于value
的元素。一个简单的方法是在for循环中再添加一个条件。例如
或者,可以使用while循环代替内部的for循环。例如
最后,只要表达式
n * m
不会导致溢出,就可以只使用一个循环。xxls0lw84#
我认为最干净的解决方案是使用纯结构化编程(即。无
break
语句):输出量: