Fortran Coder

查看: 32541|回复: 16
打印 上一主题 下一主题

[文件读写] 求助end-of-file during read

[复制链接]

14

帖子

2

主题

0

精华

入门

F 币
73 元
贡献
42 点
跳转到指定楼层
楼主
发表于 2015-3-2 11:01:41 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
各位前辈,这是小弟第一次发帖,言语措辞不当之处望海涵。
小弟编程运行时出现了这样的错误file not found,unit 5,fileE:\fortran\fem tsinghua \tsinghua fem 4 \IN.DAT。可是程序已经运用了in.dat文件的数据做了一次运算,只是后面的循环运算就不再进行了,open(5,file=‘in.dat’,status=‘old’)语句样式为此,求各位大神解惑。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1572 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

17#
发表于 2015-3-5 15:06:26 | 只看该作者
是,你可以参考本文:http://fcode.cn/guide-44-1.html

14

帖子

2

主题

0

精华

入门

F 币
73 元
贡献
42 点
16#
 楼主| 发表于 2015-3-5 14:18:37 | 只看该作者
vvt 发表于 2015-3-5 09:03
越界发生在 SUMK 函数里
SK(M,N)=SK(M,N)+EK(MO,NO)
此时的 N=2*(IJ(J)-IJ(I))+1 = 2*(57-48)+1 = 19

前辈一般用什么方法判断这种情况的啊,设置的断点吗?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
15#
发表于 2015-3-5 09:03:38 | 只看该作者
越界发生在 SUMK 函数里
SK(M,N)=SK(M,N)+EK(MO,NO)
此时的 N=2*(IJ(J)-IJ(I))+1 = 2*(57-48)+1 = 19

而 SK(182,16)

19 大于 16

14

帖子

2

主题

0

精华

入门

F 币
73 元
贡献
42 点
14#
 楼主| 发表于 2015-3-4 22:04:56 | 只看该作者
vvt 发表于 2015-3-4 10:31
与 status = 'old'  无关。

file not found 是你把 in.dat 放错了位置。

前辈,我发现问题是nd的数据取错了,改完之后计算出了81个单元刚度矩阵,但是应该计算144个单元刚度矩阵,运行时显示数组超限,这会是什么情况。nd取值为16.

14

帖子

2

主题

0

精华

入门

F 币
73 元
贡献
42 点
13#
 楼主| 发表于 2015-3-4 10:37:13 | 只看该作者
谢谢前辈,我自己再推算一遍看看。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
12#
发表于 2015-3-4 10:31:47 | 只看该作者
与 status = 'old'  无关。

file not found 是你把 in.dat 放错了位置。
如果通过编译环境上的运行按钮运行程序,则应该放在工程文件夹。
如果通过双击debug文件夹下的exe运行,则应该放在debug文件夹。

end-of-file during read 的原因是:
in.dat 文件内容不够。
不够是相对的。

第一次循环,从第一行开始读。当最终到 GOTO 10 的时候,虽然代码里从头开始执行了,但是读取位置还是文件的末端,此时再要读,就读不了了。(因为文件里只有一次的数据)

你是否应该有一个 rewind 语句?

另外,我发现你的数据读取也有问题

主程序中,80         READ(5,*)NF,NP,此时读到的是 8,0,我假设到此为止是正确的。

那么第81行:IF(NF.GT.0)CALL PF(NF,NP,NT,NWP,C(N4),IA(M2),C(N5))

进入到 PF 函数里
SUBROUTINE PF(NF,NP,NT,NWP,F,MF,ZF)
         DIMENSION MF(2,NF),ZF(NF),F(NT)
         READ(5,*)((MF(I,L),I=1,2),L=1,NF),(ZF(L),L=1,NF)


此处又在读取in.dat,而此时文件里的数据是:
1,1,-3.750
8,1,-7.500
15,1,-7.500
22,1,-7.500
29,1,-7.500
36,1,-7.500
43,1,-7.500
50,1,-7.500
57,1,-7.500
64,1,-7.500
71,1,-7.500
78,1,-7.500
85,1,-3.750
被读入到 PF 函数里的 MF 和 ZF 数组里。看起来是错位了。因为 MF 是整型,2*8 的大小,而 ZF 是 8 的大小。
这一段数字是 13*3 的。

14

帖子

2

主题

0

精华

入门

F 币
73 元
贡献
42 点
11#
 楼主| 发表于 2015-3-4 10:27:44 | 只看该作者
vvt 发表于 2015-3-4 09:38
及输入文件 in.dat

前辈,附件为书上给的主程序,前几行程序没有看懂意思,所以就参考着别的程序给删掉了。给您发过去做下参考。

MAIN PRO.FOR

3.21 KB, 下载次数: 2

书中原主程序

14

帖子

2

主题

0

精华

入门

F 币
73 元
贡献
42 点
10#
 楼主| 发表于 2015-3-4 09:55:35 | 只看该作者
vvt 发表于 2015-3-4 09:38
及输入文件 in.dat

附件为输入数据文件

IN.DAT

2.85 KB, 下载次数: 4

输入文件

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
9#
发表于 2015-3-4 09:38:02 | 只看该作者
及输入文件 in.dat
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-1 07:48

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表