我试图了解"继续"的工作原理.我理解了关键字的概念,但是当我运行不同的程序时,它的工作方式不同: - /让我向您展示一些示例:
如果我运行这个程序:
int j = 0;
int i = 0;
LABEL1: for (; i < 3; i++) {
if (true)
continue;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的价值将是3.让我们添加一个外循环:
int j = 0;
int i = 0;
LABEL2: for (; j < 3; j++) {
LABEL1: for (; i < 3; i++) {
if (true)
continue LABEL2;
}
}
Run Code Online (Sandbox Code Playgroud)
我的价值将是... 0 !! 我不明白为什么如果继续使用带有转到外部循环的标签,我不会增加.有人能解释一下为什么吗?你有一些棘手的东西吗?还是做了一段时间?
我非常感谢您提供的任何帮助.
我正在试图找出一种方法来摆脱for
在该循环中调用的函数内的循环.我知道有可能让函数返回一个值,然后检查一个特定的值然后中断,但我想直接从函数内部执行.这是因为我使用内部库来处理特定的硬件,要求我的函数的函数签名如下所示:
void foo (int passV, int aVal, long bVal)
Run Code Online (Sandbox Code Playgroud)
我知道不使用返回值是非常糟糕的做法,但是有很多情况迫使我这样做,所以请耐心等待.
考虑以下示例:
#include <stdio.h>
void foo (int a) {
printf("a: %d", a);
break;
}
int main(void) {
for (int i = 0; i <= 100; i++) {
foo(i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在这不编译.相反,我得到一个编译错误如下:
prog.c:在函数'foo'中:prog.c:6:2:错误:break语句不在循环或switch break中;
我知道这意味着什么(编译器说中断foo()
不在for
循环中)
现在,我可以从关于break语句的标准中找到的是:
break语句使控制权传递给最内部封闭while,do,for或switch语句之后的语句.语法只是简单;
考虑到我的函数是从for循环中调用的,为什么break语句不能说出for循环?此外,是否有可能在不首先返回功能的情况下实现这样的功能?
刚出现这个问题:我如何突破if
声明?我有一个很长的if语句,但有一种情况我可以在早期就突破它.
在循环中,我可以这样做:
while (something ) {
last if $some_condition;
blah, blah, blah
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我可以使用if语句执行相同的操作吗?
if ( some_condition ) {
blah, blah, blah
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将if
语句放在一个块中,然后我可以突破块:
{
if ( some_condition ) {
...
last if $some_other_condition; # No need to continue...
blah, blah, blah
...
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以创建一个子程序(可能以编程方式更好):
if ( some_condition ) {
run_subroutine();
}
sub run_subroutine {
blah, blah, blah
return if $some_other_condition;
blah, …
Run Code Online (Sandbox Code Playgroud) 可能重复:
突破嵌套循环
我有这个代码
foreach (___)
{
foreach (___)
{
foreach (___)
{
if (condition)
{
//break out of all loops
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但break
只是"打破"了最内在的循环(对不起我的英语),我想把它们全部留下......
我在考虑:
还有更优雅的方式吗?喜欢由C#提供?
在此先感谢您的帮助!
我刚问了一个关于回归的问题,它似乎和休息一样.你如何使用return,以及如何使用break,例如在你编写的实际代码中解决可以使用这些结构的问题.
我不能真正发布示例,因为我不知道如何使用它们,所以它们没有多大意义.
有人可以告诉我为什么编译器认为在以下代码break
之后有必要yield return
吗?
foreach (DesignerNode node in nodeProvider.GetNodes(span, node => node.NodeType != NDjango.Interfaces.NodeType.ParsingContext))
{
switch (node.ErrorMessage.Severity)
{
case -1:
case 0:
continue;
case 1:
yield return new TagSpan<ErrorTag>(node.SnapshotSpan, new ErrorTag(PredefinedErrorTypeNames.Warning));
break;
default:
yield return new TagSpan<ErrorTag>(node.SnapshotSpan, new ErrorTag(PredefinedErrorTypeNames.SyntaxError));
break;
}
}
Run Code Online (Sandbox Code Playgroud) 为什么这个批处理文件永远不会脱离循环?
For /L %%f In (1,1,1000000) Do @If Not Exist %%f Goto :EOF
Run Code Online (Sandbox Code Playgroud)
不应该Goto :EOF
突破循环?
我想我应该更明确地问... 我怎么能摆脱循环?
我正在使用多个嵌套for
循环.在最后一个循环中有一个if
声明.当评估True
所有for
循环应该停止,但这不会发生.它只break
离开最里面的for
循环,而不是继续前进.如果break
遇到语句,我需要所有循环停止.
我的代码:
for i in range(1, 1001):
for i2 in range(i, 1001):
for i3 in range(i2, 1001):
if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
print i*i2*i3
break
Run Code Online (Sandbox Code Playgroud) 我正在将一些Java代码转换为C#并找到一些标记为"break"的语句(例如)
label1:
while (somethingA) {
...
while (somethingB) {
if (condition) {
break label1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在C#中是否有等价物(当前读数暗示不是),如果没有,除了(比如说)具有bool标志以指示是否在每个循环结束时断开(例如)
bool label1 = false;
while (somethingA)
{
...
while (somethingB)
{
if (condition)
{
label1 = true;
break;
}
}
if (label1)
{
break;
}
}
// breaks to here
Run Code Online (Sandbox Code Playgroud)
我会感兴趣的是为什么C#没有这个,因为它似乎不是很邪恶.
假设我有一段Perl代码,如:
foreach my $x (@x) {
foreach my $y (@z) {
foreach my $z (@z) {
if (something()) {
# I want to break free!
}
# do stuff
}
# do stuff
}
# do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果something()
是真的,我想打破('最后')所有循环.
我怎样才能做到这一点?我想到了两个选项,我不喜欢这两个选项:使用一些东西GOTO
添加一个将标记的布尔变量something()
为true,在每个循环恢复之前检查这个var,last()
如果它是真的.
有什么建议或想法?
谢谢.
break ×10
for-loop ×4
c# ×3
loops ×3
flow-control ×2
java ×2
perl ×2
batch-file ×1
c ×1
continue ×1
foreach ×1
goto ×1
if-statement ×1
label ×1
python ×1
python-2.7 ×1
return ×1
ruby ×1
while-loop ×1
yield-return ×1