zy952616596 发表于 2015-3-2 11:01:41

求助end-of-file during read

各位前辈,这是小弟第一次发帖,言语措辞不当之处望海涵。
小弟编程运行时出现了这样的错误file not found,unit 5,fileE:\fortran\fem tsinghua \tsinghua fem 4 \IN.DAT。可是程序已经运用了in.dat文件的数据做了一次运算,只是后面的循环运算就不再进行了,open(5,file=‘in.dat’,status=‘old’)语句样式为此,求各位大神解惑。

vvt 发表于 2015-3-2 18:04:44

可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。

你试试把 status = 'old' 去掉试试看,会不会在其他文件夹生成 in.dat ?

如果还是找不出原因,请不全部代码给出来。

zy952616596 发表于 2015-3-3 16:13:35

vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。


将status=old删掉后运行时显示end-of-file during read,unit 5,fileE.......
删除前我是将in.dat文件放在debug文件夹里的,删除后运行时在debug文件夹外生成了一个in.dat和一个out.dat,两个均为空文件。

zy952616596 发表于 2015-3-3 16:18:19

vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。


PROGRAM MAIN
             DIMENSION C(5000),IA(1000),EK(36)
                  
                  OPEN(5,FILE='IN.DAT')
                  OPEN(6,FILE='OUT.DAT',STATUS='UNKNOWN')
10          READ(5,*)NG
                  IF(NG.EQ.0) STOP
                  WRITE(6,15)
15          FORMAT(//,5X
   &            '************ PLANE PROBLEM ***********',/)
               READ(5,*)NE,MC,NX,NB,ND,EO,VO,T
               WRITE(6,20)NG,NE,MC,NX,NB,ND,EO,VO,T
20         FORMAT(//,10X,'NG=',I4,5X,'NE=',I4,5X,'MC=',I4,5X,'NX=',I4,/,
   &      10X,'NB=',I4,5X,'ND=',I4,/,10X,'EO=',E10.4,5X,'VO=',F7.2,
   &      5X,'T=',F7.2)
               READ(5,*)NWA,NWE,NWK,NWP,NWD
               WRITE(6,25)NWA,NWE,NWK,NWP,NWD
25         FORMAT(/10X,'NWA=',I2,3X,'NWE=',I2,3X,'NWK=',I2,3X,
   &      'NWP=',I2,3X,'NWD=',I2)
                  NT=2*NG
                  M1=3*NE+1
                  M2=M1+2*NB
                  N1=2*NG+1
                  N2=N1+NB
                  N3=7*NE+N2
                  N4=N3+NT*ND
                  N5=N4+NT
                  NEND=N5
                  IF(NEND.LE.5000) GOTO 35
          WRITE(*,*)'***EXCEED THELIMIT OF ARRAY C(IN THE MIDDLE)!!***'
          WRITE(*,30) NEND
30         FORMAT(/,'*******NEND=',I6,1X,'>5000********')
                  STOP 111
35          CALL INPUT(NE,NG,NB,IA(1),C(1),IA(M1),C(N1))
                   WRITE(*,40)
40          FORMAT(/10X,'##### INPUT PASSED ######')
                   IF(MC.EQ.0)GOTO 45
                   E=EO/(1.0-VO*VO)
                   V=VO/(1.0-VO)
                   GOTO 50
45            E=EO
                  V=VO
50            NX1=NX
                  A1=E/(1.0-V*V)/4.0
                        A2=0.5*(1.0-V)
                        CALL ABC(NE,NG,NWA,IA(1),C(1),C(N2))
                        WRITE(*,55)
55            FORMAT(/10X,'###### ABCPASSED######')
               DO 60 I=N3,N4
                  C(I)=0.0
60          CONTINUE
               DO 65 K=1,NE
                  IO=K
                  CALL KE(IO,NE,NWE,T,A1,A2,V,EK(1),C(N2))
                  CALL SUMK(IO,NE,ND,NT,IA(1),C(N3),EK(1))
65          CONTINUE
                  WRITE(*,70)
70          FORMAT(/10X,'#####SUMKPASSED#####')
                  CALL CHECK(NT,ND,NWK,C(N3))
                  WRITE(*,75)
75          FORMAT(/10X,'#####CHECK PASSED#####')
80         READ(5,*)NF,NP
               M3=M2+2*NF
               N6=N5+NF
               NEND=N6+NP-1
               MEND=M3+2*NP-1
               NM=0
               IF(NEND.LE.5000)GOTO 85
               WRITE(*,*)'***EXCEED THE LIMIT OF ARRAY C(AT THE END)!!***'
               WRITE(*,30)NEND
               NM=1
85         IF(MEND.LE.1000)GOTO 95
               WRITE(*,*)'***EXCEED THE LIMIT OF ARRAY IA(AT THE END)!!***'
               WRITE(*,90)MEND
90         FORMAT(/,'********MEND=',I6,1X,'>1000*******')
               STOP 222
95         IF(NM.EQ.1)STOP 222
               DO 100 I=N4,N5
                  C(I)=0.0
100      CONTINUE
               IF(NF.GT.0)CALL PF(NF,NP,NT,NWP,C(N4),IA(M2),C(N5))
               WRITE(*,105)
105      FORMAT(/10X,'#####PFPASSED#####')
               IF(NP.GT.0)CALL PP(NP,NT,NG,NWP,C(1),C(N4),IA(M3),C(N6))
               WRITE(*,110)
110      FORMAT(/10X,'##### PPPASSED #####')
               CALL DBC(NT,ND,NB,NX,NX1,C(N3),C(N4),IA(M1),C(N1))
               WRITE(*,115)
115      FORMAT(/10X,'##### DBCPASSED #####')
               CALL GAUSS(NT,ND,NWD,NX,NX1,C(N3),C(N4))
               WRITE(*,120)
120      FORMAT(/10X,'#####GAUSS PASSED#####')
               CALL STRESS(NE,NT,A1,A2,V,IA(1),C(N2),C(N4))
               WRITE(*,125)
125      FORMAT(/10X,'#####STRESS PASSED #####')
               NX1=NX1-1
               IF(NX1.GT.0)GOTO 80
               GOTO 10
               END

zy952616596 发表于 2015-3-3 16:19:09

vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。


SUBROUTINE KE(IO,NE,NWE,T,A1,A2,V,EK,BCA)
       DIMENSION B(7),BCA(7,NE),EK(6,6)
       DO 10 I=1,7
          B(I)=BCA(I,IO)
10   CONTINUE
       A=A1/B(7)*T
       DO 20 I=1,3
          DO 20 J=I,3
          I1=2*I
          J1=2*J
          EK(I1-1,J1-1)=A*(B(I)*B(J)+A2*B(I+3)*B(J+3))
          EK(I1-1,J1)=A*(V*B(I)*B(J+3)+A2*B(I+3)*B(J))
          EK(I1,J1-1)=A*(V*B(I+3)*B(J)+A2*B(I)*B(J+3))
          EK(I1,J1)=A*(B(I+3)*B(J+3)+A2*B(I)*B(J))
20   CONTINUE
       DO 30 I=3,6
          DO 30 J=1,I
           EK(I,J)=EK(J,I)
30   CONTINUE
       IF(NWE.EQ.0)GOTO 60
       WRITE(6,40) IO
40   FORMAT(/1X,'EK   NE=',I5)
       WRITE(6,50)EK
50   FORMAT(1X,6E11.4)
60   RETURN
          END

zy952616596 发表于 2015-3-3 16:23:43

vvt 发表于 2015-3-2 18:04
可能性较多。
1.路径不正确。
2.第一次循环结束时,把文件删除了。


以上两段程序分别是主程序及其中一段相关的子程序,不知道是哪里出了错误,麻烦前辈了。小弟不胜感激。。。

vvt 发表于 2015-3-4 09:04:32

从代码片段里找出错误的难度非常大。

建议你直接上传全部源代码文件(而非复制粘贴),及输入文件 in.dat

zy952616596 发表于 2015-3-4 09:32:38

vvt 发表于 2015-3-4 09:04
从代码片段里找出错误的难度非常大。

建议你直接上传全部源代码文件(而非复制粘贴),及输入文件 in.dat ...

前辈,附件为全部程序源代码,麻烦前辈了。

vvt 发表于 2015-3-4 09:38:02

及输入文件 in.dat

zy952616596 发表于 2015-3-4 09:55:35

vvt 发表于 2015-3-4 09:38
及输入文件 in.dat

附件为输入数据文件
页: [1] 2
查看完整版本: 求助end-of-file during read