1

我想从 1 数到 10 但跳过 5。这仅在我将 incr 放在下面的开头时才有效。为什么?我认为 incr after else 将增加 a 到 2 3 4 等然后跳过 5 并进入 10。但它停在 5 并且永远不会继续。

这行得通

set a 1
set b 10

while {$a < $b} {
    incr a
    if {$a == 5} {
        continue
    } else {
        puts $a
    } 
}

这不起作用

while {$a < $b} {
    if {$a == 5} {
        continue
    } else {
        puts $a
    } 
    incr a
}
4

1 回答 1

4

想想 continue 命令的逻辑:它跳过循环的其余部分,从头开始。当 a == 5 时,if 语句为真,因此您跳过循环的其余部分,这也跳过了incr命令。到循环的顶部,a 仍然是 5,然后您再次跳过循环的其余部分。实际上,您正在进入一个无限循环。解决它的一种方法是不使用 continue 命令:

set a 1
set b 10
while {$a <= $b} {
    if {$a != 5} {
        puts $a
    }
    incr a
}

顺便说一句,第一种方法不太奏效:它跳过数字 1 并从 2 开始。

于 2013-02-23T00:56:36.033 回答