2011-06-12 6 views
8

사용자가 읽을 문자열에 공백이 있으면 Fortran에서 read (별표, 별표)를 사용하면 작동하지 않는 것 같습니다. 사용자가 문자열을 입력하면 전용 "안녕하세요,"입력에 저장됩니다, "안녕 내 이름은 홍길동입니다"Fortran에서 공백이있는 문자열 읽기

character(Len = 1000) :: input = ' ' 
    read(*,*) input 

; 다음 코드를 고려 공간을 제외한 모든 것은 무시됩니다. 내 가정은 컴파일러는 "Hello"가 첫 번째 인수이고 "my"가 두 번째이므로 다른 단어를 캡처하기 위해 read (,) input1, input2 , input3 ... 등등.이 접근 방식의 문제점은 각 입력에 대해 큰 문자 배열을 생성해야하고 정확히 몇 단어를 입력해야 하는지를 알아야한다는 것입니다. 이 주위에 어떤 방법이 있습니까 ?? 실제로 모든 문장, 공백 및 모든 것을 읽는 일부 함수는 무엇입니까? 많은 감사합니다!

답변

6

read(*, *) 대신 read(*, '(a)')을 시도하십시오. 나는 포트란 전문가가 아니지만 read에 대한 두 번째 인수는 형식 지정자입니다 (C에서 sscanf에 대한 두 번째 인수와 같습니다). * 거기에는 원하지 않는 목록 형식이 있습니다. 예를 들어 14자를 문자열로 읽으려는 경우 a14라고 말할 수도 있습니다.

+3

read (*, a)는 올바른 구문이 아닙니다 ... 형식 지정자는 괄호와 따옴표, read (*, '(a)') 또는 형식 명령문에 있어야하며 줄 번호를 통해 인용해야합니다. –

+0

맞습니다. 나는 나의 대답을 업데이트했다. 감사. –

+0

또한 Fortran의 형식 지정자가 C의'sscanf'와 정확히 동일하지 않다는 점을 지적하고자합니다. 몇 가지 점에서는 상당히 비슷하지만 일반적으로는 충분히 다릅니다. 괜찮은 개요 [여기] (http://www.oc.nps.edu/~bird/oc3030_online/fortran/io/io.html) 또는 [여기] (http://www.cs.mtu.edu)를 찾을 수 있습니다. /~shene/COURSES/cs201/NOTES/chap05/format.html). – jvriesem

20
character(100) :: line 

    write(*,'("Enter some text: ",\)') 
    read(*,'(A)') line 
    write(*,'(A)') line 

    end 

... 최대 길이 100의 텍스트 행을 읽고 (대부분의 실제적인 목적으로는 충분 함) 다시 읽어보십시오. 원하는대로 수정하십시오.

+0

고마워, 그게 내가 찾고 있었던 바로 그거야! – Gautam