2014-11-13 7 views
1

문자열 배열을 채우는 중 문제가 발생했습니다. [] 선언을 사용하여 배열에 요소를 할당 할 때 문제가 발생합니다. 배열 요소를 내 요소에 할당하면 모든 것이 이 좋습니다. 문자열 배열 Fortran 배열

Character (len=65), Allocatable :: str(:) 
Character (len=65) :: a1, a2, a3, a4, a5, a6, a7 

a1 = "red" ; a2 = "green"; a3 = "yellow"; a4 = "blue" 
a5 = "magenta"; a6 = "cyan"; a7 ="white" 

Allocate (str(7)) 
str = [a1,a2,a3,a4,a5,a6,a7] 
Write (*,*) Trim(a1), Trim(a2), Trim(a3), Trim(a4), Trim(a5) 
Write (*,*) Trim(str(1)), Trim(str(2)), Trim(str(3)), Trim(str(4)), Trim(str(5)) 
Deallocate (str) 

솔루션을 예상대로 다음 작품 문자 길이를 포함하는 것입니다

Character (len=*), Intent(in), Optional :: a2,  & 
          a3, a4, a5, a6, a7, a8 

Character (len=65), Allocatable :: str(:) 
Character (len=65) :: b(512) 

a1 = "red" 
a2 = "green" 
a3 = "yellow" 
a4 = "blue" 
a5 = "magenta" 
a6 = "cyan" 
a7 = "white" 

Allocate (str(7)) 

str = [a1, a2, a3, a4, a5, a6, a7] 

str(4) = a4 
str(5) = a5 
str(6) = a6 
str(7) = a7 

Write (*,*) "Expected output: ", Trim(a1), Trim(a2), Trim(a3), Trim(a4) 
Write (*,*) "Actual output: ", Trim(str(1)), Trim(str(2)), Trim(str(3)), Trim(str(4)) 

내가 일치 된 한 코드 출력 여기

Expected Output: redgreenyellowblue 
Actual output: redgreyelblue 

입니다 생성자의 매개 변수

str = [Character(len=65) :: a1,a2,a3,a4,a5,a6,a7] 
+0

먼저 배열 생성자의 문자 길이 매개 변수, 문제가 무엇인가를 포함하는 것입니다? 컴파일러 오류가 발생합니까? 그렇다면 오류를보고하십시오. 그냥 쓰레기 출력을 얻을 경우 출력을 명시하십시오. 둘째, 나는'[]'표기법이 유효한 포트란이 아니라는 것을 확신한다. (새로운 표준 중 하나에 있지 않다면) ... – SethMMorton

+0

'(/ a1, a2, a3, a4, a5, a6 , a7 /)'? – SethMMorton

+0

컴파일러 오류가 없습니다. 그러나 배열 요소를 출력 할 때 잘립니다. 각각을 따로 지정하면 모든 것이 잘 작동합니다. 나는 gfortran 4.9를 사용하고있다. [] 선언이 효과가있다. 예를 들어 정수와 실수로 작동합니다. – Zeus

답변

1

이 솔루션은

str = [Character(len=65) :: a1,a2,a3,a4,a5,a6,a7]