2016-11-08 45 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