将文件整数读入实型变量时遇list-directed I/O syntax error问题
Fortran列表式I/O语法错误:ifort与gfortran的行为差异
问题重现
编写Fortran代码读取文件中的整数到实型数组,逻辑看似简单,但用ifort编译运行后触发列表式I/O语法错误。
代码示例:
real :: a(3) open(newunit=u,file='t.txt', status='old') do j=1,3 read(u,*) a(j) enddo
最初提供的数据文件t.txt内容:
1 2 3
ifort编译运行后的报错信息:
forrtl: severe (59): list-directed I/O syntax error
尝试多种编译选项均无法解决,起初误以为是ifort不支持整数转实型的自动转换。
问题根源(更新)
最终排查发现,问题与类型转换完全无关——数据文件中意外混入了分号:
gfortran对这类非预期的分隔符容忍度较高,可正常读取文件ifort的列表式I/O语法检查更严格,遇到不符合规范的字符直接触发报错
总结
- 列表式I/O(即
read(*,*)/write(*,*)这类自由格式I/O)在不同编译器下的行为存在差异,ifort对语法合规性的要求比gfortran更严苛 - 排查Fortran I/O错误时,不要只聚焦变量类型匹配,务必检查数据文件中是否存在隐藏特殊字符、多余分隔符这类细节
内容的提问来源于stack exchange,提问作者Youjun Hu
相关产品推荐
相关产品推荐

