2011-06-12 95 views
8

如果要從用戶讀取的字符串包含空格,在Fortran中使用讀取(星號,星號)似乎不起作用。 考慮下面的代碼:在Fortran中讀取帶空格的字符串

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

如果用戶輸入字符串「你好,我的名字是張三」,只有「你好」,將存儲在輸入;在空間之後的一切都被忽視了。我的假設是,編譯器假定「你好」是第一個參數,而「我的」是第二個,爲了捕獲其他單詞,我們必須使用類似read(,)的input1,input2 ,input3 ...等。這種方法的問題是我們需要爲每個輸入創建大字符數組,並且需要確切地知道將輸入多少個單詞。有沒有辦法解決??一些函數會實際讀取整個句子,空格和全部?非常感謝!

回答

6

而不是read(*, *),請嘗試read(*, '(a)')。我不是Fortran專家,但read的第二個參數是格式說明符(相當於C中第二個參數sscanf)。 *那裏意味着列表格式,你不想要。例如,如果您想要以字符串的形式讀取14個字符,則還可以說a14

+3

read(*,a)不是有效的語法...格式說明符應該在括號和引號,read(*,'(a)')中,或格式語句中,並通過行號引用。 – 2011-06-12 04:13:34

+0

你是對的。我更新了我的答案。謝謝。 – 2011-06-12 16:00:25

+0

我還要指出,Fortran中的格式說明符與C中的'sscanf'不完全相同。在某些方面它非常相似,但它通常會查找它不同。你可以在這裏找到體面的概述(http://www.oc.nps.edu/~bird/oc3030_online/fortran/io/io.html)或[here](http://www.cs.mtu.edu) /~shene/COURSES/cs201/NOTES/chap05/format.html)。 – jvriesem 2014-08-14 18:06:26

20
character(100) :: line 

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

    end 

...將讀取最大長度爲100的文本行(足夠用於大多數實際目的)並將其寫回給您。修改你的喜好。

+0

謝謝,那就是我一直在尋找的! – Gautam 2011-06-13 00:00:40