回 帖 发 新 帖 刷新版面

主题:为什么我输出的数组不按顺序排列呢?

我从avd.dat文件中读入数据,第一、二、三、四列分别为时间,加速度,速度和位移,然后通过编程,用速度和位移求出应力时程,并把应力时程输出到文件avdf.dat中,可是输出后的数据乱七八糟的,一点顺序都没有,希望高手指点
program main
implicit none
integer I
real::sc(1001,4),FT(1001,2)
open(unit = 5, file="avd.dat",status='old')
read(unit = 5, fmt = *) sc
do I=1,1001
FT(I,1)=sc(I,1)
FT(I,2)=19.05*(6.945E3*sc(I,4)+7.56E3*sc(I,3))
end do
open(unit=10, file="avdf.dat",status='new')
Do I=1,1001
write(unit=10, fmt =100)FT(I,1:2)
end do
100 format(1X,F6.3,2X,F10.3)
close(5)
stop      
end program main
这是部分时间,加速度,速度和位移数据(全部数据在附件中)
     0.000                   0.000                0.000                0.000
     0.010                   0.003                0.015                0.000
     0.020                  -0.005                0.004                0.000
     0.030                  -0.013               -0.085               -0.000
     0.040                  -0.015               -0.224               -0.000
     0.050                  -0.002               -0.310               -0.000
     0.060                   0.011               -0.268               -0.000
     0.070                   0.024               -0.099               -0.000
     0.080                   0.024                0.136               -0.000
     0.090                   0.014                0.320               -0.000
这是输出的部分时间、应力数据

  0.000  **********
  0.000  984804.812
  0.000  721794.812
  0.000  **********
  0.010  **********
  0.003  986271.812
  0.015  735274.438
  0.000  **********
  0.020  **********
 -0.005  987738.875
  0.004  731951.750
  0.000  **********
  0.030  **********
 -0.013  989205.875
 -0.085  728496.750

回复列表 (共3个回复)

沙发

将格式化输出 改一改:

100 format(1X,F18.7,2X,F18.7)

板凳

F10.3 格式不对导致*的出现
close(5) 应该在read完之后使用. 后面也没有close(10)

你说的问题应该来自 read(unit = 5, fmt = *) sc
fortran的数组是列优先的. 会先sc(1,1)=>sc(2,1)=>sc(3,1)=>sc(4,1)=>......
于是你文本里面的第一行的4个0.000就给上面变量了.

这里用循环加格式化读入吧. 或者用隐含循环读入.

3 楼

read(unit = 5, fmt = *) sc
do I=1,1001
這兩行上下换一换,然后变成:
do I=1,1001
read(unit = 5, fmt = *) sc(I,:)

我来回复

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