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

时间:2015-06-20 13:32:50

标签: tcl

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

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

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

每件事情都适合IF条件,但我似乎无法评估" a"。

我试图设置" a"达到" y"的价值对于$ min< = $ x&&范围内的所有值$ x< = $ max

我请求专家强调错误。

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 个答案:

答案 0 :(得分:1)

您的代码中有很多问题。

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

  2. 在调用expr ([lindex $cal1 $i])*$offset]中,您有一个不必要的括号,但表达式周围没有括号(大括号不是强制性的,但除非有很好的理由省略它们,否则应该在那里)。另外:&#34;偏移&#34;通常表示您添加的内容,而不是与其他值相乘的内容。调用expr {[lindex $cal1 $i] * $offset}]会更好。

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

  4. puts a = $a无法正常工作,因为如果puts有多个参数,那么它们应该是标志-nonewline和/或频道ID将输出发送到。也许你的意思是puts "a = $a"