Fortran Coder

查看: 8822|回复: 2
打印 上一主题 下一主题

[输入输出] 数据读取有重复,求大家指导

[复制链接]

6

帖子

3

主题

0

精华

入门

F 币
57 元
贡献
29 点
跳转到指定楼层
楼主
发表于 2018-4-16 11:46:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求助各位大佬:我一共需要读入10个数据,先读取前7个(GroupID、Policy...VolOrFlow),做一次判断之后,读取7个空(7个aVar),再接着读取剩余的3个数据(Seep、MaxQ、LakeQ)。前7个数据读取正常,但是后3个数据读取的是第7、8、9位置的数据(而不是预想的8、9、10位置的数据),这是为啥呢?

[KI`4(`$Z0%L612_MMMTF6N.png (1.37 KB, 下载次数: 289)

[KI`4(`$Z0%L612_MMMTF6N.png

MTXGTDT(DM[B18_}2IFGPLL.jpg (500 Bytes, 下载次数: 302)

MTXGTDT(DM[B18_}2IFGPLL.jpg

S{J2J3`O32J869]4W598~~U.png (17.08 KB, 下载次数: 275)

S{J2J3`O32J869]4W598~~U.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

260

帖子

0

主题

0

精华

版主

World Analyser

F 币
722 元
贡献
512 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
沙发
发表于 2018-4-16 12:48:51 | 只看该作者
根据前面的数据判断后面是否读取,有个投机取巧的办法:

[Fortran] 纯文本查看 复制代码
  character(len=80) c
  integer :: a(10) = -999 , j , is
  c = "1 2 1 4 5 6 7 8 9 10" !//有10个数
  read( c , * ) a(:7) , ( a(8:),j=1,Is(a(3)==1,1,0) )!//如果a(3)==1,则读10个数
  write(*,*) a
  
  a = -999
  c = "1 2 0 4 5 6 7"!//只有7个数
  read( c , * ) a(:7) , ( a(8:),j=1,Is(a(3)==1,1,0) )!//如果a(3)/=1,则只读7个。
  write(*,*) a
end

Integer Function Is( b , t ,f )!//如果b为真,返回t,否则返回f。类似于C语言的 a ? b : c
  logical :: b
  integer :: t , f
  Is = f
  if( b ) Is = t  
End Function Is

6

帖子

3

主题

0

精华

入门

F 币
57 元
贡献
29 点
板凳
 楼主| 发表于 2018-4-16 14:58:05 | 只看该作者
非常感谢您的回复,您提供的方法可以帮助我解决眼下的问题了。我看的源码里面有很多地方都是像上面那样写的,您对这种写法和运行后出现的错误有什么见解呢?期待您的回复
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-26 20:33

Powered by Tencent X3.4

© 2013-2024 Tencent

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