回 帖 发 新 帖 刷新版面

主题:求助-给数据赋值时正确,但输出后数值变大10倍

请教各位,我在写一个很简单的赋值时遇到一个问题。
    DIMENSION  XY(2,455)
    OPEN(1,FILE='OUT.DAT',STATUS='OLD')

           HPB=-25
    NG1=311
    NG=455
    LROB=30
    HAT=2.30
    NG=455

    DO 10 I=1,NG1
      XY(1,I)=0.0
    XY(2,I)=HPB+0.1*(I-1)
    WRITE(1,5) I,XY(1,I),XY(2,I)
5     FORMAT(2X,I3,3X,2F8.2)
10    CONTINUE
           
    WRITE(1,70) XY
    
          DO 30 I=NG1+1,NG
    XY(1,I)=LROB
    XY(2,I)=HAT-0.1*(I-NG1-1)
    WRITE(1,25) I,XY(1,I),XY(2,I)
25     FORMAT(2X,I3,2X,2F8.2)
30    CONTINUE

      WRITE(1,70) XY

70    FORMAT(3X,1P6F10.3)
      END

-----------------------------------------
以上是我从子程序中挑出来的段落,为了检查,我在各循环赋值时 WRITE一次XY,循环结束再WRITE一次XY。
两次结果不一样,比如在循环中 XY(1,I),XY(2,I)的值分别是  0.00  -25.00
                                                       30.00  -2.00
那么循环结束后再写XY,就变为0.00  -250.00
                           300.00 -20.00
正好变为赋值的10倍,我不太清楚这里面的原因,我用的是I-N规则。

回复列表 (共5个回复)

沙发

既然没有 implicit none 代码就不看了.

板凳

你把70 format中的1P去掉。

3 楼


谢谢,没用 IMPLICT NONE 主要是我编写的是有限元软件,子程序和变量实在太多了。
我也比较担心I-N规则会出现问题。还是谢谢你。

4 楼


谢谢,问题解决了。
之前我用的教材比较简单没有 1P6F6.2 中1P的说明,我是参照别的输出格式写的,我以为是一行限制6个数的意思,看来我开始的理解不太正确。
我下去再学习一下格式的写法。

5 楼

定义变量可能是麻烦点. 但当你的代码很多之后, 使用默认的话如果代码里面出现笔误, 编译是正确的. 那种bug相当难找, 自己权衡一下吧.
FORMAT(3X,1P6F10.3) 这种格式我其实没见过. 我看的书和资料没提及过1P这样的东西. 我以为是你的笔误.

我来回复

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