我试图编写一个简短的F77程序,要求用户输入数据点名称及其10个值。数据点的绝对数量(名称+10值)应该是可变的。
因为Fortran不接受混合数组,所以我试图写一个名为的 1D数组和一个带有值的2D数组。然而,一维阵列似乎不起作用,我不知道我做错了什么。
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 :(得分: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%确定你真的想要这样与i(row / col)交换:
do i= 1, ndatapoints
read(5,*) names(i), x(:,i)
end do
答案 1 :(得分:2)
character names(1,100)*10
是形状为1x100的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)
您的界限1
,10
和100
来自哪里并不清楚。其中一些可能应该是ndatapoints
,但很难说哪一个。
疯狂猜测:
integer ndatapoints
parameter (ndatapoints=100)
character names(ndatapoints)*10
real x(ndatapoints,10)