【问题标题】:C - continue n times a for loopC - 继续 n 次 for 循环
【发布时间】:2019-12-05 14:57:37
【问题描述】:

如何使用 continue 关键字来继续 n 次循环。就像在 shell 中一样,我们可以继续 2 以跳过 2 次迭代。 如何在 C 中实现这一点。

【问题讨论】:

标签: c shell keyword


【解决方案1】:

您不能使用 continue 来执行此操作,但您可以跳过 for 循环增加变量以跳过 n 迭代。

for (int i = 0; i < 10; i++) 
{
   if (some_condition) 
     i += nSkip;

    (...) 
}

【讨论】:

  • 如果continue 如上所述是一种不好的做法,那么我会说这个更糟糕。在循环中弄乱循环计数器会使代码非常混乱。
  • continue不是不好的做法;你当然可以乱七八糟地使用它,结构一样多。
  • @Ctx 我倾向于同意。请注意我声明中的“如果”:)
  • 坏习惯与否,目前 OP 似乎正在询问如何做到这一点,这回答了这个问题(除了缺少的continue)。 (同时我不相信这个问题是他们目前想要问的。)
  • 但是,正确的解决方案仍然是if (some_condition) { i += (nSkip-1); continue; },是等价的。或者至少有一个 else 和循环体的其余部分
【解决方案2】:

这本质上是一个编程风格问题,而且这些问题总是容易引起自以为是的辩论。读者当心。 :-)

C 没有break(n)continue(n)。这是一个深思熟虑的选择。人们认为这些结构太难维护了。以后的程序员很难计算和跟踪嵌套循环。对于后来的程序员来说,插入或删除嵌套级别太容易了,从而忽略了计数。

转向最大的风格辩论之一的根源,有人说goto 是邪恶的,永远不应该使用。也有人说breakcontinue 只是变相的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)

【讨论】:

  • 一句好话;但是,从另一个答案的接受情况来看,看起来 OP 确实打算跳过循环的两次迭代......
  • 重新。 breakcontinue 伪装成 gotos,可以将该参数扩展到 return,即该值只能从一个位置(函数体的最后一行)返回。但同样的反对论点适用于breakcontinuereturn:没有它们的代码通常会以大部分嵌套在else 分支中而告终。当然,人们可以通过进一步的功能作为深层嵌套的替代品等来进一步反击。=)
  • @Ctx(额头一巴掌)他做到了!哦,好吧,又一个借口来展开关于编程风格问题的经典老辩论没有避免......
【解决方案3】:
int i;
for (int i = 0; i < 10; i++) 
{
   if (n<=2) 
     continue;
   else
      <do your task>
}

【讨论】:

  • 这不是问题要问的。
猜你喜欢
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多