Fortran Coder

查看: 117|回复: 1

[输入输出] 关于format语法问题,format语句需要引入变量

[复制链接]

4

帖子

2

主题

0

精华

入门

F 币
35 元
贡献
13 点
发表于 2024-2-5 09:59:34 | 显示全部楼层 |阅读模式
大家好,有一个可能是语法的问题请大家帮忙看看。以下是前人开发的计算程序中的一条语句,我搜索了解到 15F7.2 是指15个浮点数,每个7位,含两位小数。现在的问题是,这个“15”是根据我的输入文件来改变的,所以需要设成一个变量,我已经尝试过一些方法,但都没有正确解决,请大家帮忙看看。

FORMAT(I3,15F7.2,I8)

已经尝试的解决方法如下,为直接引入变量,编译时就报错
INTEGER:: kk_plus1=15
FORMAT(I3,kk_plus1F7.2,I8)

加上引号,编译没问题,但执行时遇到输出结果的节点出错
INTEGER:: kk_plus1=15
FORMAT(I3,'kk_plus1'F7.2,I8)

1938

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1255 元
贡献
529 点

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

发表于 2024-2-5 11:14:26 | 显示全部楼层
方案1
FORMAT(I3,<kk_plus1>F7.2,I8)
不规范,只适合部分编译器,比如 intel 的编译器

方案2
FORMAT(I3,*(F7.2))
* 的意思是有多少算多少。但这个方案后面不能再加其他变量。你可以把后面 I8 对应的变量在接下来的下一个write语句输出。

方案3,这个方案比较难理解。你需要知道,格式符本身也是一个字符串,所以可以用字符串的操作方式来构造它,比如用 // 来拼接字符串。
[Fortran] 纯文本查看 复制代码
  INTEGER:: kk_plus1=15
  real :: array(15) = 30
  character(len=8) :: fmtText
  write( fmtText , '(i8)' ) kk_plus1 !//先把 kk_plus1=15 转换成 fmtText="15"
  write( * , "(I3,"//fmtText//"F7.2,I8)") 3,array,6 !//再构造格式输出
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-2-25 12:56

Powered by Tencent X3.4

© 2013-2024 Tencent

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