Fortran读取含多类型元素数组时出现坏实数运行时错误如何解决
你遇到的报错根源是输入文件DATA.inp存在笔误,和你猜测的首列是整数无关——Fortran自由格式输入支持自动将整数转换为实数赋值给实型变量,不需要刻意把首列改成浮点数。
你提供的DATA.inp第二行第二个数据为2O.,这里是大写英文字母O,不是数字0,Fortran运行时读到这个包含字母的字段时,无法将其解析为合法实数,就会抛出你遇到的报错:
文件test.f第8行(单元 = 1,文件 = 'DATA.inp')
Fortran运行时错误:列表输入的第2项为无效实数
因为第一行数据格式是正确的,所以第一次循环读取正常,第二次循环读第二行的时候触发错误。
修复方法
- 修正输入文件笔误:把DATA.inp第二行的
2O.改成正确的20.即可正常运行。 - 可选优化代码健壮性,参考修改后的代码:
PROGRAM test IMPLICIT NONE REAL INP(8,1000) REAL INP1(1000), INP2(1000) INTEGER :: i, j, ierr ! 打开文件增加错误检查 OPEN(1,FILE='DATA.inp', STATUS='OLD', IOSTAT=ierr) IF (ierr /= 0) THEN WRITE(*,*) "打开DATA.inp失败" STOP END IF i = 1 DO READ(1,*,END=100, IOSTAT=ierr) (INP(j,i), j=1,8) IF (ierr /= 0) THEN WRITE(*,*) "读取第",i,"行出错" EXIT END IF INP1(i) = INP(1,i) INP2(i) = INP(2,i) WRITE(*,*) INP1(i), INP2(i) i = i + 1 END DO 100 CONTINUE CLOSE(1) ! 关闭文件单元 END PROGRAM
内容的提问来源于stack exchange,提问作者OB1
相关产品推荐
相关产品推荐

