1

1から10まで数えたいのですが、5をスキップします。これは、下の先頭にincrを配置した場合にのみ機能します。なんで?他の後に増加すると、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

続行コマンドのロジックについて考えてみてください。ループの残りの部分をスキップし、最初から開始します。a == 5の場合、ifステートメントはtrueであるため、残りのループをスキップします。これにより、incrコマンドもスキップされます。ループの先頭に移動すると、aはまだ5であり、ループの残りの部分を再度スキップします。事実上、あなたは無限ループに陥っています。これを修正する1つの方法は、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 に答える