2016-07-11 3 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

또한, [brace your expressions] (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] 

여기의 차이점은 무엇입니까? 빈 초기 목록을 사용하고 있습니다. 나는 파일 끝 (End-Of-File)을 시험하고있다. scan (누군가가 비 정수를 제공하는 경우)의 결과를 확인하고 있습니다. 나는 복합 표현식을 사용하고 있습니다. 모든 것이 중요하지만 코드가보다 강력해질 수 있도록 도와줍니다.