Fortran READ(*,*),WRITE(*,*)参数

时间:2015-06-02 22:39:15

标签: fortran

此问题在以前的SO问题中有所涉及。但是,之前的讨论似乎有些不完整。

Fortran有几个I / O语句。有READ(*,*)WRITE(*,*)等。第一个星号(*)是标准星号,用于指定键盘输入或输出到屏幕的输入或输出。我的问题是关于第二个星号:

第二个星号表示I / O元素的格式,即正在使用的数据TYPE。如果此星号保持不变,则fortran编译器使用默认格式(根据编译器可能是这样)。用户必须使用许多格式描述符来指定数据类型,精度等。

(1)这些格式描述符是否适用于所有Fortran编译器和所有版本的Fortran?

(2)我在哪里可以找到这些格式描述符的标准列表?例如,F8.3表示应使用带有字段宽度8和3位小数的固定点表示法打印该数字。

编辑:可以在此处找到编辑描述符的参考:http://fortranwiki.org/fortran/show/Edit+descriptors

2 个答案:

答案 0 :(得分:3)

首先,作为澄清,READ / WRITE语句中的第一个星号与您声明的含义略有不同。对于写入,它意味着写入默认文件单元(在linux世界中通常是标准输出),对于读取它意味着从默认文件单元读取(在linux世界中通常是标准的),其中任何一个都不一定连接到终端屏幕或键盘。

第二个星号表示使用列表定向IO。对于read语句,这通常很有用,因为您不需要输入的指定格式。它将行划分为由空格或逗号分隔的字段(可能是其他一些不常用的字段),并依次将每个字段读入与参数列表中该字段关联的变量,忽略未读字段,然后继续如果没有足够的字段被读入,则下一行(除非明确包括行终止字符\)。

对于写入,这意味着允许编译器确定将变量写出的格式(我相信没有分隔符)。我相信它允许在运行时执行此操作,因此您几乎可以保证它尝试编写的值将适合所使用的格式说明符,因此您可以放心,您将无法获得{{1}写出来。缺点是您必须在参数列表中手动包含分隔符,否则所有数字将一起运行。

通常,使用列表定向读取更方便用户,因此它们不必将其输入适合于严格定义的字段,并且列表定向写入对程序员来说是方便的,如果它们是不确定输出会是什么样子。

答案 1 :(得分:1)

当你有read(*,*) ...之类的数据传输语句时,了解这意味着什么是有帮助的。 read(*,*)等同于更详细的read(unit=*, fmt=*)。第二个星号,就像你拥有它一样,使这个读取语句(或相应的写语句)列表定向。

如其他地方所述,列表导向的输入/输出对程序员来说是方便的。 Fortran标准指定了编译器必须遵循的许多约束,但是这种语言具有“合理值”之类的内容,因此允许输出因编译器,设置等而异。

同样,如其他地方所述,对输出(或输入)的精细用户控制伴随着给出格式规范。而不是read(*,fmt=*),而不是read(*,fmt=1014)read(*,fmt=format_variable_or_literal)。我认为你的问题是:这种格式规范是什么?

我不会详细介绍所有可能的编辑描述符,但我会回答(2):您可以在Fortran标准中找到这些编辑描述符的列表(Fortran 2008的第10条进入所有细节)或一本好的参考书。

回答(1):不,编辑描述符不是通用的。甚至跨Fortran标准。值得注意的是:

  • 在Fortran 95中为输出引入I0(和其他最小宽度说明符);
  • 删除Fortran 95中的H编辑描述符;
  • 在Fortran 2003中引入DT编辑描述符。