2016-11-08 19 views
0

我正試圖編寫一個簡短的F77程序,要求用戶輸入帶有10個值的數據點名稱。數據點的絕對數量(名稱+ 10個值)應該是可變的。在1D數組中寫入輸入名稱

由於Fortran不接受混合陣列,我試圖編寫一個1D陣列,名稱爲和一個帶值的二維數組。然而,一維數組似乎不工作,我不知道我在做什麼錯。

implicit none 
    real x, 
    integer ndatapoints, i,j 
    character names(1,100)*10 
    dimension x(10,10) 

    do i= 1, ndatapoints 
    read(5,*) (names(i), i=1, ndatapoints),(x(i,j),j=1, 10) 
    end do 

    do i=1,ndatapoints 
    write(6,*)(x(i,j),j=1,10) 
    write(6,*)(names(i),i,ndatapoints) 
    end do 
+0

歡迎。不要在你的帖子中留下任何問候。如果沒有必要,不要在標題中加標籤。使用通用標籤[tag:fortran],並根據需要添加版本標籤。 –

+0

你應該寫出你的代碼有什麼問題。任何錯誤消息?哪個?錯誤的結果?他們看起來像什麼?從未使用*它不起作用*,那不說什麼。這句話不屬於任何好問題。 –

+0

'names'沒有被聲明爲rank-1數組,而是rank-2。但是你可以將它作爲一級參考。那麼,你會得到什麼錯誤? – francescalus

回答

2

character names(1,100)*10

是形狀1×100的2D陣列具有長度的元件串10.

1D陣列將是

character*10 names(100)

你的問題是不夠清晰說這是否是你想要的。

也有一些值是未定義的,如ndatapoints

這也是明顯的錯誤:

do i= 1, ndatapoints 
    read(5,*) (names(i), i=1, ndatapoints) 

,而且也應該只是

do i= 1, ndatapoints 
    read(5,*) names(i) 

哪裏做你的界限來自110100這是不完全清楚。其中一些可能應該是ndatapoints,但很難說哪一個。

大膽猜測:

integer ndatapoints 
parameter (ndatapoints=100) 

character names(ndatapoints)*10 
real x(ndatapoints,10) 
3

我有點老派,這似乎爲我工作:

CHARACTER(LEN=100), DIMENSION(10)  :: names 
REAL    , dimension(10,10) :: X 

do i= 1, ndatapoints 
    read(5,*) names(i), x(i,:) 
end do 

我不知道ndatapoints應該是什麼,但一般沿着線所示。我可能會使用CHARACTER(LEN = 128),只是因爲。

而且我相信你真的想這樣跟我(行/列)90%的交換:

do i= 1, ndatapoints 
    read(5,*) names(i), x(:,i) 
end do 
+0

值得注意的是Fortran 90,而不是77.但看起來是正確的,除了10應該是'ndatapoints'的問題。 –

+0

是的@Vladimir你是對的,它更多的是F90風格。 – Holmz