Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用gfortran在名称列表中进行科学记数_Fortran_Gfortran - Fatal编程技术网

用gfortran在名称列表中进行科学记数

用gfortran在名称列表中进行科学记数,fortran,gfortran,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 input.txt如下所示: &myNamelist val

我想通过名称列表从输入文件加载列表。要编译,我使用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
input.txt如下所示:

&myNamelist
val = 3e3
/

程序打印的是0而不是3000。如果我在输入文件中插入val=3000,它就会工作。gfortran似乎不支持名字列表中的科学符号。但使用ifort时,它运行良好。在gfortran的姓名列表中是否有使用科学记数法的变通方法或其他方法?

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

科学符号对整数输入无效。读取
real
变量或不使用科学符号

尝试:

运行:


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

我必须提交的2008年标准草案在第10.11.3.3.6段中,在阅读姓名列表的上下文中指出:

当下一个有效项的类型为integer时,输入中的值 记录被解释为Iw编辑描述符具有合适的 采用w值


在这种情况下,
gfortran
所做的只是标准要求,而英特尔编译器则更进一步,实现了一个扩展,可以处理非标准形式的整数值,即
3e3

它是一个扩展。我们被允许。我们允许将任何数字类型输入到列表定向或名称列表输入中的任何其他数字类型。gfortran和ifort都是正确的。此处的输入是非标准的,因此允许进行任何解释。现在修改Answer以删除英特尔编译器上的诽谤强制转换。
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
> sunf90 intnml.f90 
> ./a.out 
 1083
 unexpected character in integer value                                           



 0