使用 gfortran 的名单中的科学记数法

DaP*_*hil 2 fortran gfortran

我想通过名单从输入文件加载列表。为了编译,我使用 gfortran:

PROGRAM main

IMPLICIT NONE
INTEGER :: val,err
NAMELIST /myNamelist/ val

OPEN(100,file='input.txt')
READ(unit=100,nml=myNamelist,iostat=err)
CLOSE(100)

PRINT *, val

END PROGRAM
Run Code Online (Sandbox Code Playgroud)

input.txt 如下所示:

&myNamelist
val = 3e3
/
Run Code Online (Sandbox Code Playgroud)

该程序打印 0 而不是 3000。如果我在输入文件中插入 val = 3000,它就会起作用。看来 gfortran 不支持名单中的科学记数法。然而,使用 ifort 则运行良好。是否有解决方法或在 gfortran 的名单中使用科学记数法的方法?

Vla*_*r F 5

你使用了iostat=err,但你没有检查它的值err!如果您这样做,您会发现发生了错误情况并且该错误err情况非零。因此,val是没有用的。

科学记数法对于整数输入无效。要么读取real变量,要么不使用科学记数法。

尝试:

PROGRAM main

IMPLICIT NONE
INTEGER :: val,err
character(256) :: msg
NAMELIST /myNamelist/ val

OPEN(100,file='input.txt')
READ(unit=100,nml=myNamelist,iostat=err,iomsg=msg)
CLOSE(100)

PRINT *, err
PRINT *, msg
print *, val

END PROGRAM
Run Code Online (Sandbox Code Playgroud)

跑步:

> sunf90 intnml.f90 
> ./a.out 
 1083
 unexpected character in integer value                                           



 0
Run Code Online (Sandbox Code Playgroud)

顺便说一句,Intel Fortran 接受该值,但这是一个非标准扩展。如果你依赖它,你的程序将是不可移植的。