2013-02-23 88 views
1

我想从1到10的计数,但跳过5.这只适用于当我把incr放在下面的开始时。为什么?我认为incr后其他会增加一个2 3 4等,然后跳过5,并进入10.但它停在5,永远不会继续。Tcl虽然incr逻辑

这个作品

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

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

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

顺便提一下,第一种方式也不太工作:它跳过1号和2与

+1

啊开始我现在明白了。 这就是为什么for命令每次都能很好地完成它的原因,因为它继续退出循环并从头再次开始执行。 如果你在开始时没有放置incr,那么a永远不会增加到下一个数字。 感谢您提供不等于5的解决方案, – 2013-02-23 01:06:39