2016-07-11 11 views
0

各入力整数をリストに追加して後でソートしようとしていますが、反復処理中にリストに各整数を追加する際に問題があります。TCL/TKスクリプトで反復中に要素をリストに挿入

コード:リストの最後に要素を追加

set l1 {1 2 3 4 5} 

for {set i 0} {$i<[llength $l1]} {incr i} { 
    set data [gets stdin] 
    scan $data "%d" myint 

    if $myint<=0 {break} # stop if non positive number is found 

    set l1 {$myint} # supposed to add an input element into the list during iteration 

} 

puts $l1 
+0

答えはここにあります:http://tcl.tk/man/tcl8.6/TclCmd/lappend.htm –

+1

また、[あなたの表現を支持する](http://wiki.tcl.tk/10225): ' if {$ myint <= 0} {break} ' –

答えて

1

が容易です。ただsetの代わりにlappendを使用します。値は、いない変数に

puts [lsort -integer $l1] 

lsortコマンド作品:

lappend l1 $myint 

後でリストを並べ替えに来たとき、putsとここたとえば、lsort -integerを使用)


実際に最大5つの値を入力してソートします。そうですね、このようにコードを書いた方が良いでしょう:

set l1 {} 
for {set i 0} {$i < 5} {incr i} { 
    set data [gets stdin] 
    if {[eof stdin] || [scan $data "%d" myint] != 1 || $myint <= 0} { 
     break 
    } 
    lappend l1 $myint 
} 
puts [lsort -integer $l1] 

ここでの違いは?空の初期リストを使用しています。私はファイルの終わりをテストしています。私はscanの結果をチェックしています(誰かが非整数を提供する場合に備えて)。私は複合式を使用しています。それはすべての小さなものですが、コードをより堅牢にするのに役立ちます。

関連する問題