Fortran Coder

标题: 又是‘end of file’的报错,但是这个错误不影响程序运行 [打印本页]

作者: likm1110    时间: 2015-3-24 15:40
标题: 又是‘end of file’的报错,但是这个错误不影响程序运行
[Fortran] 纯文本查看 复制代码
Program t
  Implicit None
  Real :: a(3)      
  Real :: b(3)
  Character(10) :: cha
  Integer :: ioerr
  Open(11,file='in.txt',iostat=ioerr)
  Open(12,file='out1.txt')
  Do
    Read(11,*) cha
    If (cha(1:) == 'vector_a') Then
      Write(*,*) cha
      Read(11,*) a(:)
      Write(12,*) 'a:', a(:)
    Endif
    If (cha(1:) == 'vector_b') Then
      Write(*,*) cha
      Read(11,*) b(:)
      Write(12,*) 'b:', b(:)
    Endif
    If (ioerr/=0) Exit
  Enddo
  Close(11)
End Program t


出现如下报错 : ‘At line 10 of file testofcha00.f95 (unit = 11, file = 'in.txt')
                           Fortran runtime error: End of file’
不过程序的运行不出现错误,读入和写入都没问题。这个错误的出现会不会影响安全性什么的阿?
'in.txt'文件内容为:
       vector_a
              1.3  9.4  3.5
                   :end a
       vector_b
              2.9  7.8  3.3
                   :end b


作者: pasuka    时间: 2015-3-24 16:13
本帖最后由 pasuka 于 2015-3-24 16:14 编辑

既然知道OPEN的时候添加iostat参数,为啥不用ISO_FORTRAN_ENV模块的IOSTAT_END常量做判断呢?
传送门:
https://gcc.gnu.org/onlinedocs/g ... 005fFORTRAN_005fENV

作者: likm1110    时间: 2015-3-24 17:55
pasuka 发表于 2015-3-24 16:13
既然知道OPEN的时候添加iostat参数,为啥不用ISO_FORTRAN_ENV模块的IOSTAT_END常量做判断呢?
传送门:
htt ...

这个不是03的吗?我的还是95呢.....
作者: kif117    时间: 2015-3-24 18:05
前面加上
        integer ios
下面这样
     do i=1,数据个数
        read(10,*,iostat=ios) readyourdata   !read
        if (ios /=0) then
        exit
        endif
---
真没太注意过‘安全性’什么的。只要能用就是好程序!
作者: likm1110    时间: 2015-3-24 18:51
kif117 发表于 2015-3-24 18:05
前面加上
        integer ios
下面这样

有判断结束的语句阿,否则他就会一直循环没完没了了。安全性也很重要啊= =要不万一程序长了拼死拼活写完因为一个小bug运行错误的话才叫坑呢。。。。。。
作者: kif117    时间: 2015-3-24 19:59
likm1110 发表于 2015-3-24 18:51
有判断结束的语句阿,否则他就会一直循环没完没了了。安全性也很重要啊= =要不万一程序长了拼死拼活写完 ...

不,最坑的其实是.....

程序运行正确,自我感觉想求的东西也表达正确,但是运行结果不符合用手算的验证结果.....


作者: pasuka    时间: 2015-3-24 21:40
likm1110 发表于 2015-3-24 17:55
这个不是03的吗?我的还是95呢.....

ivf和gfortran都支持的呀,为啥不用呢?!
作者: fcode    时间: 2015-3-24 21:44
kif117 发表于 2015-3-24 19:59
不,最坑的其实是.....

程序运行正确,自我感觉想求的东西也表达正确,但是运行结果不符合用手算的验证 ...

debug 就好了,不需要手算验证。
作者: kif117    时间: 2015-3-24 22:46
fcode 发表于 2015-3-24 21:44
debug 就好了,不需要手算验证。

不不,我是反过来的。因为导师不准用电脑。比如一些题目,计算以后自己找自己的错误是很难的,这样我借用一下电脑程序作为checking mechanism. 当然,计算正确编程错误(运行无误)也是有的。这种就比较难自己改。

作者: fcode    时间: 2015-3-25 06:42
kif117 发表于 2015-3-24 22:46
不不,我是反过来的。因为导师不准用电脑。比如一些题目,计算以后自己找自己的错误是很难的,这样我借用 ...

debug 就相当于手算,而且比手算迅速,且易于检查错误。
作者: likm1110    时间: 2015-3-25 14:44
kif117 发表于 2015-3-24 19:59
不,最坑的其实是.....

程序运行正确,自我感觉想求的东西也表达正确,但是运行结果不符合用手算的验证 ...

这个时候就需要debug哈哈哈~~~~~
作者: likm1110    时间: 2015-3-25 14:45
pasuka 发表于 2015-3-24 21:40
ivf和gfortran都支持的呀,为啥不用呢?!

gfotran吗?我看看去,我用的是老师给的fedora系统......
作者: pasuka    时间: 2015-3-25 15:22
likm1110 发表于 2015-3-25 14:45
gfotran吗?我看看去,我用的是老师给的fedora系统......

从gfortran 4.7开始应该就支持的
GNU/Linux还是用gfortran吧,ivf现在也要收费了
作者: likm1110    时间: 2015-3-25 18:56
pasuka 发表于 2015-3-25 15:22
从gfortran 4.7开始应该就支持的
GNU/Linux还是用gfortran吧,ivf现在也要收费了

晕。。。sorry鼠标一滑不知道点到了什么。。。。
gcc-gfortran-4.8.3-1.....
那可能支持




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2