Fortran运行时出现End of file错误:数组降序排序代码运行故障求解
Fortran运行时EOF错误解决方法
错误原因分析
1. 直接触发EOF的核心原因
你代码中第一行读取逻辑是先读入数组长度n,你的输入文件array.txt首行值为60,也就是说代码会尝试读取后续60个元素存入数组,但你提供的输入文件除首行外仅存在9个有效数值,读取到文件末尾还未完成60次读取操作,就会触发「End of file」运行时错误。
2. 代码隐含的语法错误
你当前代码中存在笔误:
else s=a(i) a(i)=a(j) a(j)=s end i
此处end i是非法语法,应该改为end if,否则即使解决了读取问题,程序运行也会异常。
解决步骤
步骤1:修复读取逻辑不匹配问题
根据你的实际需求二选一即可:
- 如果你输入文件的首行是数组长度标记位:将
array.txt首行的60修改为9,匹配你后续实际提供的9个待排序元素即可。 - 如果你输入文件的首行
60是第一个待排序元素,不存在单独的长度行:修改代码读取逻辑,先遍历文件统计元素总数再读取存入数组,或使用动态数组适配输入长度。
步骤2:修复代码语法错误
将代码中的end i替换为end if。
修复后可正常运行的参考代码
program arrangingARRAY dimension a(100) open(1,file="array.txt") read(1,*) n do i =1, n read(1,*) a(i) enddo close(1) i=1 1 continue j=i+1 2 continue if (a(j).lt.a(i)) then goto 3 else s=a(i) a(i)=a(j) a(j)=s end if 3 continue j=j+1 if (j.le.n) then goto 2 else i=i+1 end if if (i.lt.n) then goto 1 end if open(1,file="decreasingARRAY.txt") do i=1,n write(1,*) a(i) enddo end
对应修改后的输入文件array.txt内容:
9 123 60 21 1 2 3 4 11 90
内容的提问来源于stack exchange,提问作者gray KK
相关产品推荐
相关产品推荐

