目录


Tcl循环

循环控制语句

无限循环

Tcl while循环

语法

流程图

示例

Tcl for循环

语法

流程图

示例

Tcl嵌套循环

语法

示例

Tcl break语句

语法

流程图

示例

Tcl continue语句

语法

流程图

示例


Tcl循环

可能有一种情况,当需要执行一个代码块多次。在一般情况下,语句是顺序执行的:如在函数内的第一条语句,首先执行,然后是第二个 ... 等等。

编程语言提供了各种控制结构,允许更多复杂的执行路径。

循环语句可以让我们执行语句多次或代码组,下面是在大多数编程语言循环语句的一般形式:

初识Tcl(五):Tcl 循环_while循环

TCL语言提供循环以下类型来处理循环。

循环类型

描述

while循环

重复声明语句或一组,当给定的条件为真。它测试条件在执行循环体前。

for循环

执行语句多次,序列和简写管理循环变量的代码。

内嵌循环

可以使用一个或多个循环内再使用其它的while语句,或do..while循环。

循环控制语句

循环控制语句改变其正常的顺序执行。当执行离开范围,在该范围内创建的所有自动对象被销毁。

TCL支持下面的控制语句。

控制语句

描述

break语句

终止循环或switch语句并将执行立即循环或切换到下面的语句。

continue语句

导致循环跳过它的主体的其余部分,并立即重新测试其条件声明之前。

无限循环

如果条件永远不会为假那么一个循环就是无限循环。 while循环是传统上用于此目的。可以通过条件表达式为1,来执行一个死循环。

while {1} {
puts "This loop will run forever."
}

当条件表达式为不存在,它被假定为真。 TCL程序员更普遍使用while {1} 构造以表示无限循环。

注意:可以通过按 Ctrl+ C键 终止无限循环。

Tcl while循环

在Tcl语言while循环,只要给定的条件为真,执行目标语句声明多次。

语法

在Tcl语言while循环的语法是:

while {condition} {
statement(s)
}

在这里,声明(S)可以是单个语句或语句块。所述条件可以是任何表达,真是指任何非零值。循环迭代当条件为真。

当条件为假,则程序控制进到紧接在循环之后的代码行。

流程图

初识Tcl(五):Tcl 循环_for循环_02

在这里,while循环的关键点是,当条件测试结果为假时,在循环可能不会永远运行。循环体将跳过while循环后的第一个语句将被执行。

示例

#!/usr/bin/tclsh

set a 10

#while loop execution
while { $a < 20 } {
puts "value of a: $a"
incr a
}

当上述代码被编译和执行时,它产生了以下结果:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

Tcl for循环

for循环是一个循环控制结构,可以有效地编写需要执行特定的代码次数。

语法

Tcl语言for循环的语法是:

for {initialization} {condition} {increment} {
statement(s);
}

下面是一个循环控制的流程:

  • 初始化步骤首先执行,并且只有一次。这一步可以声明和初始化任何循环控制变量。不需要把一个声明放在这里,只要给定一个分号。
  • 接着,条件condition进行了计算。如果为真,则执行循环体。如果是假的,循环体不执行,for循环之后的流程控制跳转到下一条语句。
  • 循环的执行主体之后,控制流跳转回到增量语句。此语句可以更新任何循环控制变量。这个语句可以留空,只需要一个分号。
  • 条件现在重新计算评估。如果条件为真,循环执行的过程中重新执行(循环体,然后增加步,然后再次计算条件)。之后当条件为假时,for循环终止。

流程图

初识Tcl(五):Tcl 循环_while循环_03

示例

#!/usr/bin/tclsh

# for loop execution
for { set a 10} {$a < 20} {incr a} {
puts "value of a: $a"
}

当上述代码被编译和执行时,它产生了以下结果:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

Tcl嵌套循环

TCL允许使用一个循环内的另一个循环。下面的内容展示几个例子来说明这个概念。

语法

Tcl语言的嵌套的循环语句的语法如下:

for {initialization} {condition} {increment} {
for {initialization} {condition} {increment} {
statement(s);
}
statement(s);
}

Tcl语言嵌套while循环语句的语法如下:

while {condition} {
while {condition} {
statement(s);
}
statement(s);
}

在循环嵌套最后需要说明的是,可以把任何类型循环嵌套在其他类型循环内。例如,for循环可以是一个while循环的内循环,或反之亦然。

示例

下面的程序使用嵌套for循环从2至100找出所有的素数:

#!/usr/bin/tclsh

set j 0;
for {set i 2} {$i<100} {incr i} {
for {set j 2} {$j <= [expr $i/$j] } {incr j} {
if { [expr $i%$j] == 0 } {
break
}
}
if {$j >[expr $i/$j] } {
puts "$i is prime"
}
}

当上述代码被编译和执行时,它产生了以下结果:

2 is prime
3 is prime
5 is prime
7 is prime
11 is prime
13 is prime
17 is prime
19 is prime
23 is prime
29 is prime
31 is prime
37 is prime
41 is prime
43 is prime
47 is prime
53 is prime
59 is prime
61 is prime
67 is prime
71 is prime
73 is prime
79 is prime
83 is prime
89 is prime
97 is prime

Tcl break语句

在Tcl语言break语句用于终止循环。当循环中遇到break语句,循环立即终止,程序控制继续循环体后面的语句。

如果使用嵌套循环(即,一个循环在另一个循环体中),break语句将停止最内层循环的执行,并开始执行的下一行代码段程序之后。

语法

Tcl break语句的语法如下:

break;

流程图

初识Tcl(五):Tcl 循环_for循环_04

示例

#!/usr/bin/tclsh

set a 10

# while loop execution
while {$a < 20 } {
puts "value of a: $a"
incr a
if { $a > 15} {
# terminate the loop using break statement
break
}
}

当上述代码被编译和执行时,它产生了以下结果:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15

Tcl continue语句

Tcl语言中continue语句的工作有点像break语句。但不是强制终止,但是,继续强制循环的下一个迭代发生,跳过中间的代码。

对于for循环,continue语句使循环的条件测试和增量部分执行。对于while循环,continue语句通过程序控制的条件测试。

语法

在Tcl continue语句的语法如下:

continue;

流程图

初识Tcl(五):Tcl 循环_while循环_05

示例

#!/usr/bin/tclsh

set a 10
# do loop execution
while { $a < 20 } {
if { $a == 15} {
#skip the iteration
incr a
continue
}
puts "value of a: $a"
incr a
}

当上述代码被编译和执行时,它产生了以下结果:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19