如何用带增量的Tcl for循环实现每5个计数后输出‘GOOD’
问题
现有750个计数,每组包含5个计数,不想编写多个独立的for循环(比如for {set i 0} {i < 5}...、for {set i 5} {i < 10}...),希望每完成5个计数的输出后插入“GOOD”。
当前编写的代码如下:
for {set i 0} {i < 750} {incr i} { puts $i if { i * 15} { puts GOOD }
期望输出格式:
0
1
2
3
4
GOOD
5
6
7
8
9
GOOD
……
745
746
747
748
749
GOOD
解决方法
你当前代码的问题在于if条件逻辑错误,i * 15无法实现分组判断,应该用取模运算来识别每组的结束节点。
正确代码如下:
for {set i 0} {$i < 750} {incr i} { puts $i # 判断当前计数是每组的第5个(从0开始计数,i+1对应第N个数) if {[expr ($i + 1) % 5] == 0} { puts "GOOD" } }
逻辑说明:
- 循环从
i=0执行到i=749,刚好覆盖750个计数 - 每次先输出当前计数
i ($i + 1) % 5 == 0的作用是判断当前数是否是第5、10、15……个,也就是每组的最后一个数,此时输出“GOOD”- 全程只用一个循环就能实现分组后插入指定内容的需求
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

