【问题标题】:Using Continue in a While loop在 While 循环中使用 Continue
【发布时间】:2011-08-30 00:36:05
【问题描述】:

在处理文本文件时可以在 While 循环中使用 Continue 吗?

我想做一些处理并检查一些值。如果为真,我想跳过一次迭代。如果为 false,我想继续下一组行(继续处理)。

while not EOF(InFile) do  
begin  
 DoSomething;  
 if (AcctTag = '') OR (MasterId = '') then  
  Continue;  
 DoSomething;  
end;  

这种情况下的 continue 会跳过迭代吗?

【问题讨论】:

  • 我有时会发现如果您可以跳过继续,它会使代码更清晰。在您的情况下: If (AcctTag '') And (MasterId '') Then DoSomething;
  • @johnny,完全同意,continue 就像一个 goto,使用它时要格外小心,否则就要面对意大利面条代码怪物的愤怒。
  • if (AcctTag = '') OR (MasterId = '') then Next;

标签: delphi delphi-7


【解决方案1】:

似乎一个 30 秒的快速测试会比这里的帖子更快地回答这个问题。 :)

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i, j: Integer;

begin
  j := 0;
  i := 0;
  while i < 10 do
  begin
    Inc(i);
    if Odd(i) then
      Continue;
    Inc(j);
    WriteLn(Format('i = %d, j = %d', [i, j]));
  end;
  ReadLn;
end.

注意i 在调用Continue 之前递增,这导致j 显示奇数​​,我显示even? j 仅在循环通过 Continue 测试时递增。

while 无论是递增整数、连接字符串还是从文本文件中读取,都以相同的方式工作。 while 是 while 是 while 无论你如何使用它。您只需要确保在上面的代码中,DoSomething 实际上会从文件中读取下一行,否则您将进入一个连续循环。

【讨论】:

  • 版主注意 请保持 cmets 建设性和主题性。我已经删除了这个答案下的 cmets,因为它们退化为噪音。
【解决方案2】:

甚至不需要测试。 The documentation已经告诉你答案了:

在 Delphi 代码中,Continue 过程使控制流继续执行封闭的 for、while 或 repeat 语句的下一次迭代。

请注意,没有关于循环正在做什么的警告。 Continue 语句继续进行 any 循环的下一次迭代。在您的情况下,这意味着将再次检查 Eof,然后循环体将运行。

【讨论】:

  • 我认为有歧义的地方是“下一次迭代”的意思。这对for、while 和repeat 究竟意味着什么?我确实知道这个问题的答案,但在我看来,如果把它拼出来,文档会更好。
猜你喜欢
  • 2012-07-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多