回 帖 发 新 帖 刷新版面

主题:[讨论]请教:write函数中的输出变量如何循环改变??

[size=3]各位大侠:
    我的程序中需用write函数输出结果,write(10,'(3x,F10.4)')b1(j)。其中b1是个数组,我的想法是能不能是数值b1也可以循环变化,比如b2、b3.....等?
  我的程序:PROGRAM NONSPEC
  IMPLICIT NONE
  real::i,j
  real,dimension(1:4)::b1,b2
  CHARACTER(LEN=3),DIMENSION(1:2)::R,RR
  b1=(/2.,3.,4.,5./)
  b2=(/1.,2.,3.,4./)
  R=(/'001','002'/)
  RR=(/'b1','b2'/)
  do i=1,2
     open(10,file=R(i)//'.dat',status='replace')
     do j=1,4
        write(10,'(3x,F10.4)')RR(i)(j)
     end do
  end do
  end
我想实现的目的是:通过循环将数组b1、b2中的内容写入新打开的文件001.dat和002.dat中。编译错误:D:\Fortran Program\12.f90(13) : Error: Syntax error, found ')' when expecting one of: :
     write(10,'(3x,F10.4)')RR(i)(j)
-----------------------------------------^
Error executing df.exe.
我也知道错误就是write函数后边的输出变量不对,但是怎样才能实现我的目的呢?
因为我的程序中有许多名字相近的数组,均需要输出到新的文件中,所以我想通过循环来实现,请各位大侠赐教啊!
先谢谢了!![/size]

回复列表 (共4个回复)

沙发

用二维数组就可以了。
 CHARACTER(LEN=3)::R(2),RR(2,2)

do i=1,2
     open(10,file=R(i)//'.dat',status='replace')
     do j=1,2
        write(10,'(3x,F10.4)')RR(i,j)
     end do
  end do

板凳

[size=3][quote]用二维数组就可以了。
 CHARACTER(LEN=3)::R(2),RR(2,2)

do i=1,2
     open(10,file=R(i)//'.dat',status='replace')
     do j=1,2
        write(10,'(3x,F10.4)')RR(i,j)
     end do
  end do
[/quote]
谢谢了!
我又想到一个问题,如果我想若干个二维数组写入到一个新的文件中,而数组名之间是有规律的。相当于我上边的例子中b1、b2均为二维数组,请问此时我该怎么办才能将若干个不同数组通过循环写入不同的新文件中呢??[/size]

3 楼

首先,你应该对编译器的机制有一点点了解。

所谓的数组名,b1,b2 只是给人看的,而不是机器。b1,b2出现在源代码里,经过编译器编译以后,它们已经变成了内存地址。

所以你的数组名是叫 b1 还是 b2 或者是 bvoddnqu 或者  dwdsfg 都没有关系。数组名只存在与编译前。

而所有的循环都会保留到运行时操作。

在运行时,b1 b2 不再是 b1 b2,而是类似 0x00421F32 或者 0x0065DEA7 这样的内存地址。

所以你的想法是不可能行得通的。

按照前面的思维,你用一个三维数组就可以了。

虽然代码上我们人类看起来 b1 b2 b3 b4 是有规律的,但对于编译器来说,编译器并不理解这种规律,它跟你命名成 bdwdss  bgoget bgccdet bccrge 一样。之所以命名为 b1 b2 b3 b4 是方便人类阅读源代码 ,而不是编译器。

4 楼

非常感谢3L的回答,看了之后真实焕然大悟啊!!
谢谢了!看来我还是多写几行程序得了,虽然方法比较笨,但能保证对就行!
在此表示感谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册