这应该很简单,但我无法在Fortran中读取浮点数。我的程序test.f看起来像这样:
PROGRAM TEST
open(UNIT=1,FILE='test.inp')
read(1,'(f3.0)')line
STOP
END
输入文件test.inp
只包含一个浮动:1.2
现在编译我的testfile很好,但是当我运行它时出现错误:
在test.f文件的第4行(unit = 1,file ='test.inp')
Fortran运行时错误:格式化传输中项目1的预期REAL,得到INTEGER
(f3.0)
^
我尝试了不同的代码修改,并且还搜索了错误消息,但没有结果。任何帮助将不胜感激!
此致 弗兰克
答案 0 :(得分:5)
您的变量line
被隐式定义为整数。这不适用于f
编辑描述符。如果要读取整数,请使用i
编辑描述符(例如i3
)。否则将line
声明为数学“f”描述符。
旁边注意:.0不是问题,因为如果Fortran获得带小数点的数字,则忽略描述符中的.0部分。它仅在输入没有小数的数字时使用,然后使用desciptor中小数点后面的数字将小数点添加到正确的位置。对于F8.5
,123456789
读为123.45678
。更多关于这里http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/fortran/lin/compiler_f/lref_for/source_files/pghredf.htm。
答案 1 :(得分:1)
在您的阅读声明中
read(1,'(f3.0)')line
f3.0
告诉游程程序读取小数点后0位数的3位数(这是n.m语法的含义)。所以我假设程序只是从文件中读取1
(不是1.2
),这是一个整数。尝试用
read(1,'(f3.1)')line
但是,如果您的文件中的数字可能会更改并且大于9.9或者具有多个小数位,则应将字段宽度增加到大于3的值。
有关在Fortran中阅读和书写的更多信息,请参阅read
intrinsic和data edit descriptors的文档。
编辑:格式说明符是读取参数中引号的第二个参数,格式为fw.d
,其中f
表示要读取的数据是浮动的点号,w
是字段的宽度,包括所有空格和小数点,d
指定小数点右边的位数。
答案 2 :(得分:1)
我建议读/写列表格式化数据,除非你有非常强烈的理由不这样做。假设您从一个只有一个浮点数或整数的文件中读入,如此
123.45
11
42
那么这应该是阅读
real*8 :: x,y,z
open(1,file=filename)
read(1,*)x
read(1,*)y
read(1,*)z
close(1)