tcl - 如何按用户定义数组大小和元素?
问题描述
我目前正在学习 TCL,但遇到了练习集的问题。思考过程是这样的:
- 该脚本将询问数组的大小 (N)。
- 用户将输入基于 N 的数组元素。
该脚本将打印:
- 数组的大小
- 数组的元素
- 数组元素的总和
我一直在寻找一种方法,并找到stdin
了一个起点。
[更新] 尝试编码。它可以满足要求,但我认为这可以改进。
array set elements { }
puts "Enter array size: "
gets stdin N
if {($N < 1) || ($N > 10)} {
puts "Array size invalid."
} else {
for {set i 1} {$i <= $N} {incr i} {
puts "Enter element ($i) value: "
gets stdin value
set elements($i) "$value"
}
}
puts "Array size is $N"
parray elements
set sum 0
for {set i 1} {$i <= $N} {incr i} {
set sum [expr {$sum +$elements($i)} ]
}
puts "The sum is $sum"
解决方案
Tcl 的数组(以及列表和字典)将包含您放入其中的数据量。它们没有您提前声明的固定大小。
要执行 N 次操作,请使用for
如下循环:
for {set i 1} {$i <= $N} {incr i} {
DoTheActionHereForStep $i
}
您将需要使用一些代码来输入 N 的值,并使用更多代码来读取该循环内的值。(您可以使用 获取数组的当前大小array size
。)然后使用puts
再次将值打印出来,这就是您可以总结这些值的方式:
set sum 0
for {set i 1} {$i <= $N} {incr i} {
set sum [expr { $sum + $theArray($i) }]
}
# Now $sum is the sum of the values in the array
可以看到,这是前面循环操作在求和问题上的应用。
推荐阅读
- autosar - AUTOSAR的实现规则?
- flutter - 如果启用了 nullsafety,如何在颤振复选框中管理三态
- c# - Linq 到实体可以为空的 int 列需要吗?
- python - django模板使用模板变量作为索引获取列表项
- javascript - Javascript/HTML - 隐藏 DIV 直到单击按钮
- tensorflow - 权重标准化——使用 tf.keras.layers.Wrapper 更新权重会将其从 layer.weights 列表中删除
- sql - 具有大于和小于 Sybase DB 的计数条件
- android - Android File.createNewFile false 但也存在 false
- angular - 点击结果后角度输入得到结果
- python - Python:将对象重新分配给没有构造函数的类不会覆盖字典字段