在1D数组中写入输入名称

时间:2016-11-08 23:19:52

标签: arrays fortran character fortran77

我试图编写一个简短的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

2 个答案:

答案 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)

您的界限110100来自哪里并不清楚。其中一些可能应该是ndatapoints,但很难说哪一个。

疯狂猜测:

integer ndatapoints
parameter (ndatapoints=100)

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