【发布时间】:2019-12-05 14:57:37
【问题描述】:
如何使用 continue 关键字来继续 n 次循环。就像在 shell 中一样,我们可以继续 2 以跳过 2 次迭代。 如何在 C 中实现这一点。
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
如何使用 continue 关键字来继续 n 次循环。就像在 shell 中一样,我们可以继续 2 以跳过 2 次迭代。 如何在 C 中实现这一点。
【问题讨论】:
您不能使用 continue 来执行此操作,但您可以跳过 for 循环增加变量以跳过 n 迭代。
for (int i = 0; i < 10; i++)
{
if (some_condition)
i += nSkip;
(...)
}
【讨论】:
continue 如上所述是一种不好的做法,那么我会说这个更糟糕。在循环中弄乱循环计数器会使代码非常混乱。
continue 是不是不好的做法;你当然可以乱七八糟地使用它,结构一样多。
continue)。 (同时我不相信这个问题是他们目前想要问的。)
if (some_condition) { i += (nSkip-1); continue; },是等价的。或者至少有一个 else 和循环体的其余部分
这本质上是一个编程风格问题,而且这些问题总是容易引起自以为是的辩论。读者当心。 :-)
C 没有break(n) 和continue(n)。这是一个深思熟虑的选择。人们认为这些结构太难维护了。以后的程序员很难计算和跟踪嵌套循环。对于后来的程序员来说,插入或删除嵌套级别太容易了,从而忽略了计数。
转向最大的风格辩论之一的根源,有人说goto 是邪恶的,永远不应该使用。也有人说break 和continue 只是变相的goto,它们也不应该被使用。就个人而言,我不同意这两个立场,但我确实同意break(n) 和continue(n) 与纯粹的goto 相比几乎没有价值;它们至少同样令人困惑并且容易出错。因此,如果您发现自己在 C 中需要 break(n) 或 continue(n),并且没有其他办法,那就硬着头皮使用 goto。您需要 break(n) 或 continue(n) 的事实证明您正在做一些不可挽回的丑陋,所以 goto 不会让事情变得更糟。
(现在,确实如此,用goto out; 替换break(n) 很容易,但几乎没有那么容易。一般来说,用continue(n) 替换goto。所以你会可能必须做其他事情,而且可能会很丑陋,但同样,当你到达这里时,无论如何你都注定要这样做。)
另请参阅this question 及其答案,尽管这里的讨论专门针对break(n),而不是continue(n)。
【讨论】:
break 和 continue 伪装成 gotos,可以将该参数扩展到 return,即该值只能从一个位置(函数体的最后一行)返回。但同样的反对论点适用于break、continue 和return:没有它们的代码通常会以大部分嵌套在else 分支中而告终。当然,人们可以通过进一步的功能作为深层嵌套的替代品等来进一步反击。=)
int i;
for (int i = 0; i < 10; i++)
{
if (n<=2)
continue;
else
<do your task>
}
【讨论】: