2016-07-11 26 views
0

Ich versuche, jede Eingabe Ganzzahl in eine Liste hinzuzufügen und später zu sortieren, aber ich habe Probleme beim Hinzufügen jeder Integer in die Liste während der Iteration.Einfügen von Elementen in List während der Iteration in TCL/TK Scripting

Code:

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

Die Antwort ist hier: http://tcl.tk/man/tcl8.6/TclCmd/lappend.htm –

+1

Auch [Klammer Ihre Ausdrücke] (http://wiki.tcl.tk/10225): ' wenn {$ myint <= 0} {break} ' –

Antwort

1

ein Element an das Ende einer Liste hinzuzufügen ist einfach; verwenden nur lappend statt set:

lappend l1 $myint 

Wenn Sie später kommen die Liste zu sortieren, verwenden lsort -integer, zum Beispiel hier mit den puts:

puts [lsort -integer $l1] 

(The lsort Befehl funktioniert auf Werte, keine Variablen wie lappend.)


es scheint jedoch, Sie versuchen, sind um bis zu fünf Werte einzugeben und diese zu sortieren. Wenn das so ist, wäre es besser, wenn Sie Ihren Code wie folgt schreiben würden:

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] 

Die Unterschiede hier? Ich benutze eine leere Anfangsliste. Ich teste das Ende der Datei. Ich überprüfe das Ergebnis von scan (falls jemand eine Nicht-Ganzzahl liefert). Ich verwende einen zusammengesetzten Ausdruck. Es sind alles kleine Dinge, aber sie helfen dem Code, robuster zu sein.