在Fortran中读取float时出错

时间:2011-12-12 15:54:28

标签: fortran

这应该很简单,但我无法在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)

     

^

我尝试了不同的代码修改,并且还搜索了错误消息,但没有结果。任何帮助将不胜感激!

此致 弗兰克

3 个答案:

答案 0 :(得分:5)

您的变量line被隐式定义为整数。这不适用于f编辑描述符。如果要读取整数,请使用i编辑描述符(例如i3)。否则将line声明为数学“f”描述符。

旁边注意:.0不是问题,因为如果Fortran获得带小数点的数字,则忽略描述符中的.0部分。它仅在输入没有小数的数字时使用,然后使用desciptor中小数点后面的数字将小数点添加到正确的位置。对于F8.5123456789读为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 intrinsicdata 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)