ZetCode

Tcl while 命令

最后修改于 2025 年 4 月 3 日

Tcl 的 while 命令创建一个循环,只要条件保持为真,该循环就会执行。它是 Tcl 中用于重复任务的基本控制结构。循环会一直持续到条件评估为假为止。

基本定义

while 命令会评估一个表达式,并在表达式为真时重复执行一段代码。语法是:while test body

test 是一个布尔表达式。body 包含要执行的 Tcl 命令。body 必须用花括号或引号括起来。

简单的计数器循环

此示例演示了一个基本的 while 循环,该循环从 1 计数到 5。

basic_while.tcl
set count 1
while {$count <= 5} {
    puts "Count is $count"
    incr count
}

循环以 count=1 开始,并在 count ≤ 5 时继续。incr 命令递增计数器。每次迭代都会打印当前的 count 值。

求和

此示例使用 while 循环计算从 1 到 10 的数字之和。

while_sum.tcl
set sum 0
set i 1
while {$i <= 10} {
    set sum [expr {$sum + $i}]
    incr i
}
puts "The sum is $sum"

我们将 sum 初始化为 0,将 i 初始化为 1。循环在 i ≤ 10 时将 i 的每个值加到 sum 中。循环结束后,我们打印总和(应为 55)。

读取直到满足条件

此示例从用户那里读取输入,直到用户输入“quit”为止。

while_input.tcl
set input ""
while {$input ne "quit"} {
    puts -nonewline "Enter text (quit to exit): "
    flush stdout
    gets stdin input
    puts "You entered: $input"
}

只要输入不等于“quit”,循环就会继续。gets 命令读取用户输入。flush stdout 确保提示立即出现。

带 break 的无限循环

这展示了如何创建一个可以使用 break 退出的无限循环。

while_infinite.tcl
set count 0
while {1} {
    incr count
    puts "Iteration $count"
    if {$count >= 5} {
        break
    }
}

条件 {1} 始终为真,从而创建了一个无限循环。当 count 达到 5 时,我们使用 break 退出。当退出条件复杂或出现在循环中间时,此模式很有用。

嵌套的 while 循环

此示例演示了嵌套的 while 循环以创建乘法表。

while_nested.tcl
set i 1
while {$i <= 5} {
    set j 1
    while {$j <= 5} {
        set product [expr {$i * $j}]
        puts -nonewline [format "%4d" $product]
        incr j
    }
    puts ""
    incr i
}

外层循环控制行 (i),内层循环控制列 (j)。我们计算每个乘积并格式化输出。结果是一个 5x5 的乘法表。

使用 continue 控制循环

此示例展示了如何使用 continue 命令跳过迭代。

while_continue.tcl
set num 0
while {$num < 10} {
    incr num
    if {$num % 2 == 0} {
        continue
    }
    puts "$num is odd"
}

循环仅打印 1 到 10 之间的奇数。当 num 为偶数时,continue 命令会跳过该迭代的其余部分。这表明了如何在循环中选择性地处理项。

最佳实践

本教程涵盖了 Tcl 的 while 命令,并提供了实用的示例,展示了其在不同场景下的用法。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Tcl 教程