2012-03-14 302 views
0

我想将以下c代码转换为TCL。在TCL中使用两个变量的循环

int a[10],b[10]; 
int n=20 

for (i=1,j=1; i<=n; i+=2,j++) 
{ 
    b[j]=a[i]; 
} 

我需要改变这个for循环TCL,我不想使用TCL在foreach功能... TCL是否为循环结构允许两个循环变量???

+1

这不是真正的代码,是吗?从数组末尾读取是一个糟糕的主意。 – 2012-03-14 21:04:55

+0

这不是真正的代码,它类似于将[]中的第一个元素分配给b [],忽略[]中的第二个元素并将[]的第三个元素再次分配给b [],省略将[]的相邻元素分配给b []。 – user1270123 2012-03-14 21:10:22

+0

它类似于将[]的奇数位置分配给b []。 – user1270123 2012-03-14 21:11:15

回答

4

你见过discussion here

set n 6 
    for { 
       set i  1 
       set j  1 
      } { 
       $i < $n 
      } { 
       incr i 
       incr j 
      } { 
       puts "$i $j" 
    } 
+4

+1。您可以使用分号而不是换行符来实现更紧凑的外观:'for {set i 1; set j 1} {$ i <$ n} {incr i; incr j} {...}' – 2012-03-15 02:05:14

2

这不会达到你要找什么,但考虑到你在C来,你需要有目标阵列开始。 ..它有可能实现你的实际目标。

foreach循环可以将一个名称列表作为存储变量。每个名称都会从输入列表中获取一个值。因此,你可以用它来多个值从输入列表每次迭代:

set result {} 
foreach {x1 x2} {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20} { 
    lappend result $x1 
} 
puts $result 
# 1 3 5 7 9 11 13 15 17 19 

完全无关的问题,但也不错,就是它可以采取多种变量名和列表,太:

set result {} 
foreach {a1 a2} {1 2 3 4 5 6} b {A B C} { 
    lappend result $a1 $b $a2 - 
} 
puts $result 
# 1 A 2 - 3 B 4 - 5 C 6