在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
}
}
答案 0 :(得分:1)
您的代码中有很多问题。
在第一行中,您使用变量lenght
。 Tcl并不关心拼写,但如果你没有这样的变量(你可能会有一个length
变量),你就会收到错误。
在调用expr ([lindex $cal1 $i])*$offset]
中,您有一个不必要的括号,但表达式周围没有括号(大括号不是强制性的,但除非有很好的理由省略它们,否则应该在那里)。另外:&#34;偏移&#34;通常表示您添加的内容,而不是与其他值相乘的内容。调用expr {[lindex $cal1 $i] * $offset}]
会更好。
变量y
稍后用作lindex
的列表参数,但它是作为标量变量创建的。此外,您的表达式将字符串(或者更确切地说,无效的裸字)除以2.也许您的意思是lappend y [expr {$cal2 / 2}]
?如果您使用lappend
,则每个值都会添加到现有列表的末尾,或者如果y
不存在则会作为新列表的第一个元素。这通常是人们想要的,但这意味着列表y
应该在进入循环之前使用set y [list]
或set y {}
重置,以删除之前添加的元素(如果有的话)。 / p>
puts a = $a
无法正常工作,因为如果puts
有多个参数,那么它们应该是标志-nonewline
和/或频道ID将输出发送到。也许你的意思是puts "a = $a"
。