无法使用 TCL 评估 IF 和 For 循环中的变量

Cannot evaluating variable within IF and For loop using TCL

在 TCL 的以下代码中,我似乎无法计算变量 "a"

我正在评估 x 和 y,在同一个 For 循环中,我有一个 IF 语句正在检查 x 和 y 之间的范围。

如果有效,那么我想在 IF 条件下执行更多计算。

一切都符合 IF 条件,但我似乎无法评估 "a"。

我正在尝试为 $min <= $x && $x <= $max

范围内的所有值将 "a" 的值设置为 "y" 的值

请专家指出错误。

for {set i 0} {$i < $lenght} {incr i} {

set x [expr ([lindex $cal1 $i])*$offset]

set y [expr ((cal2)/2) ]


if {$min <= $x && $x <= $max } {

puts "is Active"

set a [lindex $y $i]
puts a = $a

}

}

您的代码中有很多问题。

  1. 在第一行中,您使用了变量 lenght。 Tcl 不关心拼写,但是如果你没有这样的变量(你可能有一个 length 变量)你会得到一个错误。

  2. 在调用 expr ([lindex $cal1 $i])*$offset] 中,您有一个不必要的括号,但表达式周围没有大括号(大括号不是强制性的,但应该存在,除非有充分的理由省略它们).另外: "offset" 通常意味着你添加到另一个值,而不是乘以另一个值。调用expr {[lindex $cal1 $i] * $offset}]会更好。

  3. 变量 y 稍后用作 lindex 的列表参数,但它是作为标量变量创建的。此外,您的表达式将一个字符串(或者更确切地说,一个无效的裸词)除以 2。也许您的意思是 lappend y [expr {$cal2 / 2}]?如果您使用 lappend,每个值将被添加到现有列表的末尾,或者如果 y 不存在,则作为新列表的第一个元素。这通常是人们想要的,但这意味着列表 y 应该在进入循环之前使用 set y [list]set y {} 重置,以删除之前添加的元素(如果有的话)。

  4. puts a = $a 将不起作用,因为如果 puts 有多个参数,它们应该是标志 -nonewline and/or 将输出发送到的频道 ID。也许你的意思是 puts "a = $a".